에 바인딩하는 방법을 지역적 맥락을 차단하는 글로벌 콘텍스트에서 Rebol2?
문제
내가 알고있는 것처럼,당신은 할 수 바인딩 블록 모든 문맥.특히 바인딩할 수 있는 글로벌 컨텍스트를 블록 지 context:
>> a: context [
print: does [rebol/words/print "yeah!"]
f: func[b] [do bind b 'print]
]
>> a/f [print "hello"]
yeah!
== "hello"
그래서 수 있어야 합니다 바인딩하는 지역적 맥락을 차단하는 글로벌 콘텍스트요?하지만 내려고 시도는 실패했:
>> b: context [
b: [print "hello"]
print: does [rebol/words/print "yeah!"]
f: func[] [do bind b 'system]
]
>> b/b
== [print "hello"]
>> do b/b
yeah!
== "hello"
>> b/f
hello
>> do b/b
hello
그것은 보인다 나는 그것을 만들하지만:
>> equal? bind? 'system bind? in b 'b
== false
>> same? bind? in b 'f bind? in b 'b
== true
내가 무엇을 여기에서 오류가?
해결책
당신이에 바인딩하는 단어에서 블록 할당 b/b
, 지 않습 단어 바인딩 b
자체입니다.
>> equal? bind? 'system bind? in b 'b
== false
이 두 개체를 비교하고,첫 번째는 하나이 'system
밖에 없고,두 번째는 하나이 in b 'b
에 바인딩(최고 수준 b
object).
는 것입을 차단하는지 정말 바다, 단어에서 블록 다.블록이 자신 없는 바,심지어로 개념입니다.또한,블록 할당 b/b
은 값이 일어나는 할당 b/b
, 지 말씀 'b
.
이 비해 작업해야 합:
>> equal? bind? 'system bind? first get in b 'b
== true
무엇을 비교하고 있는 이 바인딩의 첫 번째 단어의 블록 할당 b/b
, 는 것입 print
당신이 바운드로 이전.는 단어가 무엇을 변경한 바인딩에 b/f
.
다른 팁
바인딩 정보는 블록이 아닌 단어별로 운반됩니다.블록이 리바운드되면 바인딩 프로세스는 블록에 포함 된 단어에 영향을줍니다.따라서 b/b
블록 (in b 'b
Word가 아닌)이 올바르게 리바운드되었지만 수표가 잘못되었습니다.블록 내부의 리바운드 단어 중 하나에서 컨텍스트를 검색해야합니다 (
>> equal? bind? 'system bind? b/b/1
== true
. 제휴하지 않습니다 StackOverflow