我想知道是否有一種方法可以讓我在當前的上下文中動態定義一個以前未定義的變量。例如:在Ruby中,有沒有辦法在當前上下文中動態定義局部變量?
foo # => NameError: undefined method or local variable ...
# Some method call which sets foo = 1 in the local context
foo # => 1
換句話說,考慮到foo
是不確定的,我正在尋找它可以讓我定義的局部變量foo
不使用foo
變量(例如,如果我有一些其他的變量bar
任何代碼其值是:foo
,我不得不依靠它來設置foo
的值)。
看來eval('foo = 1')
或eval('foo = 1', binding)
,或在紅寶石2.1,binding.local_variable_set(:foo, 1)
都等同於:
1.times do
foo = 1
end
換句話說
,他們在新當地環境的背景設定foo
,使得除此之外無法訪問價值。
是我想要做的可能嗎?
更新:此問題不是特定於任何特定的局部變量上下文(模塊/類,方法,過程,塊等)。我有興趣明確地知道任何可以或不可以完成的環境。
你試圖解決什麼問題?你試圖做什麼,這可能是紅寶石,但我不認爲這是一件好事。 – phoet
不一樣,但也許'define_method(:foo){1}'是一個選項? – spickermann
我知道它涉及可變範圍,但我不明白你的問題。 – icantbecool