2013-03-08 17 views

答えて

13

instance_evalは、ラムダに対してselfUser)である。ラムダは、その方法については同じ方法でパラメータを扱いますが、少なすぎると多くの場合は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?

+1

関連項目:http://stackoverflow.com/questions/12648157/instance-evals-block-arguments-documented-purpose – rampion

+0

私のバージョンでは、ラムダは引数を取っていません。そして、私はinstance_evalの時点では何も渡していません。だから、なぜこの議論の問題の数が不一致なのか。 –

+0

'instance_eval'はproc/lambdaに対して自己を生成しています。 – pdoherty926

4

あなたはまだラムダを使用したい場合は、このコードは動作します:instance_eval

block = lambda { "Hello" } # or -> { "Hello" } 
some_obj.instance_exec(&block) 

instance_execは逆に、与えられたブロックの引数としてselfを供給しませんしたがってwrong number of arguments (1 for 0)はスローされません。

詳細はhereをご覧ください。

関連する問題