我有密码
class A < BasicObject
def initialize var1, *args, &block
if var1 == :lambda
@var1 = lambda &block
end
end
end
a = A.new :lambda, 123 do |var|
puts "ha ha ha"
end
为什么会报错?
undefined method `lambda' for #<A:0x00000001687968> (NoMethodError)
不像这个(不是它造成的)
class A
def initialize var1, *args, &block
if var1 == :lambda
@var1 = lambda &block
end
end
end
最佳答案
lambda
方法定义在Kernel
模块中。 对象
包括内核
。 BasicObject
没有。因此,如果您想从 BasicObject 使用 lambda
,则必须将其称为 ::Kernel.lambda
。
请注意,这并非特定于 lambda
- 它也适用于任何其他内核方法(例如 puts
)。
PS:请注意,@var1 = lambda &block
与编写 @var1 = block
的作用相同,因此使用 lambda
这里实际上没有必要。
关于ruby - ruby 代码中未定义的方法 `lambda',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287567/