Actions
Bug #6151
closedArgumentError of lambda shows wrong location
Description
=begin
Perhaps there is a reason, but it sure seems like a bug to me. Given this simple class:
#
class BlockParser < BasicObject
def initialize(data={}, &block)
@data = data
instance_eval(&block)
end
def method_missing(name, *args, &block)
if block
@data[name] = {}
BlockParser.new(@data[name], &block)
else
case args.size
when 0
@data[name]
when 1
@data[name] = args.first
else
@data[name] = args
end
end
end
end
Then we can do:
data = {}
BlockParser.new(data) do
name 'Tommy'
end
data #=> {:name=>'Tommy'}
But,
data = {}
blk = lambda do
name 'Tommy'
end
BlockParser.new(data, &blk)
ArgumentError: wrong number of arguments (1 for 0)
from (irb):44:in `block in irb_binding'
from (irb):16:in `instance_eval'
from (irb):16:in `initialize'
from (irb):46:in `new'
from (irb):46
from /home/trans/.rbfu/rubies/1.9.3-p0/bin/irb:12:in `<main>'
If I use (({Proc.new})) instead of (({lambda})) it works. But since I am using (({#instance_eval})) to evaluate the Proc, that shouldn't matter.
Note the reported line number of the error corresponds to (({name 'Tommy'})).
=end
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0