11

私は次のクラスを持っています:

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_eval2番目がエラーで失敗するのはなぜwrong number of arguments (1 for 0)ですか?

4

2 に答える 2

17

instance_evalself( User) をラムダに譲っています。ラムダは、メソッドと同じようにパラメータにこだわり、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 とラムダの違いは何ですか?

于 2013-03-08T22:51:59.553 に答える