[英]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.