親スコープ内の変数を設定するには、ブロックを使用して、便利ですが、文字列内の変数の初期化をすべて行う必要があるため制限されています。は宝石<a href="https://github.com/banister/binding_of_caller" rel="nofollow"><code>binding_of_caller</code></a>が親スコープで変数を設定する方法についての例があり
私は少し考えて、YAMLを使ってオブジェクトをシリアライズ/デシリアライズすることができることに気付きました。
テイク、例えば、次の例:
def c
value = YAML.dump [ { a: "b" } ]
binding.of_caller(2).eval("var = YAML.load('#{value}')")
end
a()
# => {a: "b"}
これはクールですが、私は完全に直列化を回避し、ちょうどそのような適切なdo; end;
ブロック書くことができれば、それが良いだろう:
# doesnt work
def c
binding.of_caller(2).eval do
# ideally this would set the variable named "var" in the scope of method "a"
var = [ { a: "b" } ]
end
end
を
この最後の例の機能をどのように達成できますか?別の方法がある場合はbinding_of_caller
を使用する必要はありません。
質問がありますか? –
@Jordan明示的な質問を追加しました –