에 바인딩하는 방법을 지역적 맥락을 차단하는 글로벌 콘텍스트에서 Rebol2?

StackOverflow https://stackoverflow.com//questions/22055249

  •  21-12-2019
  •  | 
  •  

문제

내가 알고있는 것처럼,당신은 할 수 바인딩 블록 모든 문맥.특히 바인딩할 수 있는 글로벌 컨텍스트를 블록 지 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
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top