Раньше я писал подобные выражения - с лексической областью действия.
Так что я пишу свои собственные (печально, но это не удастся с несколькими потоками):
# 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
Я ищу в Google такие конструкции (возможно, дополнительные определения блоков) для ruby, но не могу найти их. Может я что то потерял? Какие рубиновые люди используют в таких случаях?
PS: Извините за мой плохой английский, вы знаете.
UPD: Не могу привести пример использования:
@inst_var = 1
with :inst_var => 2 do
puts @inst_var
end
puts @inst_var
выход:
2
1