2010-07-17 4 views
2

Rebol 3에 new implementation of FUNCTION이 있습니다.이 변수를 사용하면 기본적으로 변수를 로컬 컨텍스트에 자동으로 바인딩 할 수 있습니다.내장 기능과 FUNCS 추가 기능의 차이점은 무엇입니까?

FUNCTION에 VALUE 문제가있는 것 같습니다. 변수가 아직 실행시 설정되어 있지 않은 경우에도이 TRUE를 반환으로 테스트 : 당신이 FOO를 호출하면

foo: function [] [ 
    if value? 'bar [ 
     print [{Before assignment, bar has a value, and it is} bar] 
    ] 

    bar: 10 

    if value? 'bar [ 
     print [{After assignment, bar has a value, and it is} bar] 
    ] 
] 

당신은 얻을 것이다 : FUNC가 작동하는 방법이 아니다

Before assignment, bar has a value, and it is none 
After assignment, bar has a value, and it is 10 

(그것은 단지 BAR은 과제 후 가치가 있다고 말한다). 그러나 FUNC는 자동으로 변수를 로컬로 만들지 않습니다.

Ladislav Mecir이 만든 라이브러리에서 FUNCS 프리미티브를 발견했습니다. 어떻게 다른가, 그리고 같은 단점이 있습니까?

http://www.fm.vslib.cz/~ladislav/rebol/funcs.r

+0

당신이 REBOL 약 좀 더 배울 범위 지정, Rubol에 대한 두 번째 조사 (예 :이 테스트)를 원할 수 있습니다. http://github.com/hostilefork/rubol/blob/master/scope-test.r – HostileFork

+0

나는 ladislav 바인딩을 10 번 다시 읽었으며 모두 이해할 수는 없지만 당신과 똑같을 거 같아서 열심히 노력할거야;) –

답변

3

주요 차이점은, 몸에 세트 - 단어에 대한 그 기능 깊은 검색, 그들에게 동안이 FUNCS 단지 얕은 검색합니다. FUNCS는 약간 다른 사양을 사용합니다.

FUNCS는 꽤 오랫동안 사용되어 왔습니다 (이름 변경은 오래 전에 발생하지 않았습니다).

저 VALUE? function "problem"은 함수의 지역 변수 (/ LOCAL과 함께 FUNC를 사용하여 명시 적으로 선언 한 경우에도)가 NONE으로 초기화된다는 사실과 관련이 있습니다. 그게 VALUE의 원인이 되나요? 변수가 "아직 초기화되지 않은"경우에도 TRUE를 반환합니다. 이 문제는 전역 또는 개체 변수 중 하나의 동작과 동일하지 않지만

일반적으로, 나는이 "큰 거래"를 "None으로 초기화"를 참조하지 않는

+0

자주 옵션 매개 변수를 테스트하기를 원하기 때문에 큰 일이다. 세련미가 항상 사용자 친화적 인 것은 아니며 매개 변수를 무시할 수 있어야합니다. –

+0

VALUE을 (를) 확실히 이해할 수 있습니까? 발행물. 예제 코드를 작성하여 실행하면 어떤 내용인지 확인할 수 있습니다. – Ladislav

+0

선택적 매개 변수에 대한 테스트는 가능합니다. – Ladislav