[英]Why does instance_eval succeed with a Proc but not with a Lambda?
我有以下课程:
class User
code1 = Proc.new { }
code2 = lambda { }
define_method :test do
self.class.instance_eval &code1
self.class.instance_eval &code2
end
end
User.new.test
为什么第二个instance_eval
失败并且wrong number of arguments (1 for 0)
错误?
instance_eval
正在向lambda产生self
( User
)。 Lambdas特别关注它们的参数 - 与方法相同 - 并且如果太少/很多则会引发ArgumentError
。
class User
code1 = Proc.new { |x| x == User } # true
code2 = lambda { |x| x == User } # true
define_method :test do
self.class.instance_eval &code1
self.class.instance_eval &code2
end
end
如果您仍想使用lambda,此代码将起作用:
block = lambda { "Hello" } # or -> { "Hello" }
some_obj.instance_exec(&block)
instance_exec
相反的instance_eval
不会将self
作为给定块的参数提供,因此不会抛出wrong number of arguments (1 for 0)
。
在这里查看更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.