別のスコープ内で定義されたブロックからオブジェクトにアクセスする方法はありますか? わかりにくい場合は申し訳ありませんが、少し例を示します。
def scope(&block)
foo = "bar"
instance_eval &block
end
scope do
puts "foo is #{foo}"
end
出力を取得したい:
"foo is bar"
出来ますか?
別のスコープ内で定義されたブロックからオブジェクトにアクセスする方法はありますか? わかりにくい場合は申し訳ありませんが、少し例を示します。
def scope(&block)
foo = "bar"
instance_eval &block
end
scope do
puts "foo is #{foo}"
end
出力を取得したい:
"foo is bar"
出来ますか?
本当の問題はあなたが何をしようとしているのかですが、あなたが得ることができる最も近いものはこれです:
def scope
@foo = "bar"
yield
end
scope do
puts "foo is #{@foo}"
end
@foo
ローカル変数の代わりにインスタンス変数を使用していることに注意してください。次のように明示的にアクセスしない限り、インスタンス変数にアクセスすることはできません。
def scope
foo = "bar"
yield foo
end
scope do |foo|
puts "foo is #{foo}"
end
しかし、これは良いことです。そうしないと、ローカル変数との競合を回避することが困難になります。
&block
注:また、明示的な使用を暗黙的な使用に置き換えましたyield
。フォームにはブロックが存在する必要があり、yield
構文はより単純ですが、主にスタイルの問題です。