我今天早上发现proc.new在类初始化方法中工作,但不是lambda。具体来说,我的意思是:
class TestClass
attr_reader :proc, :lambda
def initialize
@proc = Proc.new {puts "Hello from Proc"}
@lambda = lambda {puts "Hello from lambda"}
end
end
c = TestClass.new
c.proc.call
c.lambda.call
在上述情况下,结果将是:
Hello from Proc
test.rb:14:in `<main>': undefined method `call' for nil:NilClass (NoMethodError)
为什么?
谢谢!
答案 0 :(得分:6)
您定义了名为attr_accessor
的{{1}}这一事实隐藏了创建块的原始lambda
方法(因此您的代码实际上隐藏了Ruby的lambda
)。您需要将该属性命名为其他内容才能使其正常工作:
lambda