스크립트 헤더의 요구 사항 필드를 처리 할 때 R3의 동작과 단어 바인딩에 어떤 영향이 있는지 알고 싶습니다.R3는 스크립트 헤더의 필요 필드를 어떻게 사용합니까? 네임 스페이스에 어떤 영향이 있습니까?
배경. 현재 R3을 배우기 위해 R2 스크립트를 R3에 이식하려고합니다. R2에서 스크립트 헤더의 Needs 필드는 기본적으로 문서 였지만 스크립트를 실행하는 데 필요한 스크립트를 참조하는 사용자 지정 함수를 사용했습니다.
R3은 Needs 참조 스크립트 자체를 호출하는 것처럼 보이지만 바인딩은 다른 스크립트를 수행하는 것과 다릅니다.
예를 들어 %의 테스트 parent.r 인 경우 :
REBOL [
title: {test parent}
needs: [%test-child.r]
]
parent: now
?? parent
?? child
와 % 테스트 아이이다 : 09 :
REBOL [
title: {test child}
]
child: now
?? child
R3 알파 (Saphiron 22-2 월 11분의 2,013 빌드 : 25)을 반환 테스트 부모 %의 시험 child.r 설정 자식에 액세스 할 수없는 이유
>> do %test-parent.r
Script: "test parent" Version: none Date: none
child: 9-May-2013/22:51:52+10:00
parent: 9-May-2013/22:51:52+10:00
** Script error: child has no value
** Where: get ajoin case ?? catch either either -apply- do
** Near: get :name
가 이해가 안
test-parent.r 헤더에서 Needs 필드를 제거하고 대신 DO % test-child.r에 행을 삽입하면 오류가없고 스크립트가 예상대로 수행됩니다.
감사 브라이언 :
은 모듈 시스템의 작동 방법에 대한 자세한 내용은 여기를 봐! 내 스크립트가 R2와 R3 모두에서 멋지게 재생되도록 노력하면서 뭔가 씹을 필요가 있습니다. – Brett
글쎄, 그건 생각보다 간단 해. R2는 버전과 구성 요소 요구 사항 이외에는 니즈 헤더를 사용하지 못하게한다. 따라서 R2와 R3에서 코드를 작동시키는 유일한 방법은'do'를 사용하고 모듈을 포기하는 것입니다. R2에 대한 요구 사항 제한을 완화하는 것이 다음 버전의 todo 목록에있었습니다. 새로운 R2 버전은 계획되지 않았습니다. 우리는 R3 모듈 시스템의 하위 집합의 백 포트를 R2로 만들려고했습니다. – BrianH
안녕하세요 Brian, 언제나처럼 훌륭한 정보. 스크립트를 모듈로 로딩하는 것과 관련하여 한 가지 더 질문 : 모듈로로드 된 스크립트는 현재 상황으로 가져올 수 없으므로 부작용 만로드 할 수 있습니다. 스크립트에서 가져올 단어를 정의하기 위해 가져 오기에 다른 상세 검색 기능을 추가하는 것이 합리적일까요? – ingo