어휘 범위와 함께 let-like 표현을 쓰곤 했었습니다.Ruby에 들어있는 것과 비슷한 것
그래서 나는 (슬픈, 그러나 그것은 여러 스레드와 함께 실패합니다) 내 자신의 쓰기 :
# 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
내가 루비와 같은 구조물 (아마도 추가적인 블록 정의)에 대한 구글에서 검색,하지만 그것을 발견 할 수 . 어쩌면 내가 느슨해 졌을 까? 루비 사람들이 그런 경우에 사용하는 것은 무엇입니까?
추신 : 내 나쁜 영어로 죄송합니다.
UPD : 내가 사용의 예를 제공하기 위해 foget :
@inst_var = 1
with :inst_var => 2 do
puts @inst_var
end
puts @inst_var
출력 :
2
1
이하자 같은 표현은 무엇입니까? –
@Andrew : let-expressions은 여러 언어 (LISP, 하스켈, ML 등)로 사용됩니다. http://www.cs.cmu.edu/~rwh/introsml/core/decls.htm – tokland