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

前端之家收集整理的这篇文章主要介绍了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?

猜你在找的Ruby相关文章