私はletのような式を書いていました-字句スコープで。
だから私は自分で書いています(悲しいですが、複数のスレッドで失敗します):
# Useful thing for replacing a value of
# variable only for one block of code.
# Maybe such thing already exist, I just not found it.
def with(dict, &block)
old_values = {}
# replace by new
dict.each_pair do |key, value|
key = "@#{key}"
old_values[key] = instance_variable_get key
instance_variable_set key, value
end
block.call
# replace by old
old_values.each_pair do |key, value|
instance_variable_set key, value
end
end
私はグーグルでルビーのそのような構造(おそらく追加のブロック定義)を検索しましたが、それを見つけることができません。多分私は何かを失いますか?そのような場合、どのルビーの人々が使用しますか?
PS:私の悪い英語でごめんなさい、あなたは知っています。
UPD:使用例を紹介します。
@inst_var = 1
with :inst_var => 2 do
puts @inst_var
end
puts @inst_var
出力:
2
1