Hi all,
I would like to know if it’s possible to overload the [] operator to
use a block with it.
example:
class Test
def
# to do something here
yield if block_given?
end
end
t = Test.new
t[‘string’] do
puts ‘this is a test’
end
Thanks
Hi all,
I would like to know if it’s possible to overload the [] operator to
use a block with it.
example:
class Test
def
# to do something here
yield if block_given?
end
end
t = Test.new
t[‘string’] do
puts ‘this is a test’
end
Thanks
Did you try to and find an error?
Jason
On 28.02.2007 21:15, Stéphane Wirtel wrote:
end
t = Test.new
t[‘string’] do
puts ‘this is a test’
end
AFAIK it’s not because the syntax does not allow a block with []:
irb(main):001:0> o=Object.new
=> #Object:0x7ff96dc8
irb(main):002:0> def o.
irb(main):003:1> yield x
irb(main):004:1> end
=> nil
irb(main):005:0> o[1] {|*a| p a}
SyntaxError: compile error
(irb):5: parse error, unexpected ‘{’, expecting $
o[1] {|*a| p a}
^
from (irb):5
from :0
Kind regards
robert
On 2/28/07, Robert K. [email protected] wrote:
yield if block_given?
irb(main):001:0> o=Object.new
from (irb):5
from :0Kind regards
robert
Yep.
You can however do
t.send(:[], ‘string’) do
puts “This kind of defeats the purpose”
end
On Feb 28, 2007, at 3:21 PM, Stéphane Wirtel wrote:
end
Not in Ruby 1.8.x but your example works just fine in Ruby 1.9.
The problem isn’t with the definition of the method but in the
way the 1.8.x parser deals with the trailing block on the method
call. The parser has been changed to recognize the block in 1.9.
Gary W.
thanks Gary
Stephane W.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs