2009-06-19 23 views
38

これについては簡単な答えがあると確信しています。私はそれを見つけるように見えない。私はRubyでネストされた関数を作った、と私はトラブル内側の関数の内部、外部関数から変数へのアクセスを持っていた:入れ子関数内の外部変数にアクセスするRuby

def foo(x) 
    def bar 
    puts x 
    end 
    bar 
    42 
end 

foo(5) 

私が手:NameError: undefined local variable or method X」をメイン用:Object`

類似したPythonコード作品:

def foo(x): 
    def bar(): 
    print x 
    bar() 
    return 42 

foo(5) 

私はRubyで同じことをやりますか?

+9

ここで重要なの(微妙な)違いはデフ...最後は法ではなく、関数を定義していることである:あなたの代わりに何ができるか

はPROCを使用しています。 tadmanが示すように、lambda/procを使用して関数を定義し、クロージャ内のローカル変数を取得します。 – rampion

答えて

44

私が知る限り、関数内で名前付き関数を定義しても、ローカル変数にはアクセスできません。

def foo(x) 
    bar = lambda do 
    puts x 
    end 
    bar.call 
    42 
end 

foo(5) 
関連する問題