-2
binding
とeval
を使用して、メソッドの外部から変数の値を変更する方法がわかりません。 例方法:Ruby:メソッド外の変数を変更する
def foo
a = 1
binding
end
私は、2つの方法で変数a
を得ることができます。しかし、私はそれを行うことができます
foo.local_variable_get(:a) #=> 1
# or
foo.eval("a") #=> 1
しかし、私は新しい値
foo.local_variable_set(:a, 2)
foo.local_variable_get(:a) #=> still 1
foo.eval("a = 2")
foo.local_variable_get(:a) #=> still 1
を設定することはできませんバインディングの場合オブジェクトはどのメソッドの外にもグローバルスコープで作成されました。
bar = 123
binding # Binding object with global scope
binding.eval("bar") #=> 123
binding.eval("bar = 456")
binding.eval("bar") #=> 456
メソッド外のメソッドローカル変数に新しい値を設定するにはどうすればよいですか?ありがとうございました。
最初の質問を呼び出す場合
それが動作するはずですなぜあなたはそれの外からメソッド内のローカル変数を変更したいのですか?ローカル変数、インスタンス変数、クラス変数、グローバル変数の違いを理解していない可能性がありますか?これは "[XY問題](https://meta.stackexchange.com/q/66377/153968)"のように聞こえますが、あなたは1つのことについて尋ねていますが、実際には別のことを尋ねるべきです。なぜあなたはあなたのプログラムの範囲でこれを行うことができるようにしたいのかという目標を説明してください。 –
これは意味をなさない。ローカル変数は、メソッドの内部で永続性を必要としない値を保持するために使用されます。メソッドが終了するとすぐに破棄されます。その変化を方法の中で起こすようにあなたはどこで提案しますか?ローカル?いくつかのランダムなまたは任意のスポットの中流?このような機能をどのように使用するかを示すコードスニペットをお勧めします。 –
@theTinMan、私はこれについて[ここ](https://ruby-doc.org/core-2.2.0/Binding.html#local_variable_set-method)を読んでいて、irbで同様の例を試しました。私はそれを理解したい。 – tbard