ruby – 为什么instance_eval使用Proc而不是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

为什么secondinstance_eval失败并且参数数量错误(1表示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

相关:What’s the difference between a proc and a lambda in Ruby?

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...