【发布时间】:2011-02-15 23:41:27
【问题描述】:
我曾经写过类似 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
我在 google 中搜索 ruby 的此类结构(可能是其他块定义),但找不到。也许我失去了一些东西?在这种情况下,红宝石人使用什么?
PS:对不起,我的英语不好,你知道的。
UPD:我想提供使用示例:
@inst_var = 1
with :inst_var => 2 do
puts @inst_var
end
puts @inst_var
输出:
2
1
【问题讨论】:
-
什么是 let-like 表达式?
-
@Andrew:let-expressions 用于多种语言(LISP、Haskell、ML,...)。 cs.cmu.edu/~rwh/introsml/core/decls.htm
标签: ruby lexical-scope