繁体   English   中英

为什么instance_eval使用Proc而不是Lambda成功?

[英]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产生selfUser )。 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

相关: Ruby中的proc和lambda有什么区别?

如果您仍想使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM