【发布时间】:2013-05-14 18:57:44
【问题描述】:
要明确 - 这段代码运行完美 - code with proc
但如果我将 Proc.new 更改为 lambda,则会出现错误
ArgumentError: wrong number of arguments (1 for 0)
可能是因为 instance_eval 想将 self 作为参数传递,而 lambda 将其视为方法,不接受未知参数?
有两个例子——第一个是有效的:
class Rule
def get_rule
Proc.new { puts name }
end
end
class Person
attr_accessor :name
def init_rule
@name = "ruby"
instance_eval(&Rule.new.get_rule)
end
end
第二个不是:
class Rule
def get_rule
lambda { puts name }
end
end
class Person
attr_accessor :name
def init_rule
@name = "ruby"
instance_eval(&Rule.new.get_rule)
end
end
谢谢
【问题讨论】:
标签: ruby lambda metaprogramming