From: Robert Klemme Date: 2003-03-17T18:21:11+09:00 Subject: Re: Overloaded operator interprets block as hash what about: class Foo def initialize(p) self <<(p) end def <<(p) @closure = p end def callit(*args) @closure.call(*args) end end f = Foo.new proc { puts "bar" } f.callit f << proc { puts "hello" } f.callit robert "Phil Tomson" schrieb im Newsbeitrag news:b4tt9l01nee@enews1.newsguy.com... > > I'm trying to define an operator that takes a block, like: > > a << {puts "Action!"} > > but the part in '{}' gets interpreted as a hash. Here's the sample code: > class Foo > def initialize(&proc) > @closure = proc > end > > def assign(newVal = Proc.new) > @closure = newVal > end > > def <<(newVal = Proc.new) > @closure = newVal > end > def callit > @closure.call > end > end > > f= Foo.new { puts "Action!" } > f.callit #=> "Action!" > f.assign { puts "New Action!" } > f.callit #=> "New Action!" > f<< { puts "Latest Action!" } > > SyntaxError: compile error > (irb):26: parse error > f << { puts "Latest Action!" } > ^ > from (irb):26 > > ... it seems as though the block being passed to '<<' is getting > interpreted as a hash while it isn't for the 'assign' method. Is there > anyway around this? > > > Phil