내가 R3 알파 99 세션을 시작하고 첫 번째 명령으로 이것을 입력하면, 나는 오류 얻을 :EMAIL 같은 것을 바인딩 할 수없는 이유는 무엇입니까? 인터프리터 시작시 글로벌 컨텍스트에서?
>> is-email-addr: get bind to-word "email?" bind? 'system
** Script error: email? is not in the specified context
** Where: bind
** Near: bind to-word "email?" bind? 'system
을하지만 종료하면 다시 시작 대신은 그 email?
원시적 인 삶을 증명하는 테스트를 실행
>> equal? bind? 'system bind? 'email?
== true
>> is-email-addr: get bind to-word "email?" bind? 'system
>> is-email-addr [email protected]
== true
, 여기에 무슨 일 : system
객체와 같은 글로벌 맥락에서, 시험 자체가 내 별명 일을 무엇입니까?
을 신선한 인터프리터에 바인드를 얻을 수 *,/새에 단어 "이메일 ? " 묶다? '시스템 *이 작동하지 않습니다. 사실이 명령을 실행하면 인턴 사례가 나중에 실패하게됩니다. 그러나 바인드 후 인터프리터가 다시 시작되면 LOAD와 마찬가지로 INTERN 예제가 작동합니다. 왜? – HostileFork
AltME에서 언급했듯이 단어를 직접 사용하지 않는 이유는 * "em"* 및 * 'email! *를 사용하는 단순 리매 퍼를 작성하려고 시도하고 * em? *를 * email? *의 별칭으로 만들기 위해 약어를 사용하고 * em! * * 이메일! *. 이를 위해서는 단어 사이의 문자열 관계를 악용해야합니다. – HostileFork
"Whyzzat?" 그 명령을 실행할 때 'email'이라는 단어를 추가했기 때문에? 값이 할당되지 않은 사용자 컨텍스트에 할당하고 시스템 또는 내보내기 컨텍스트에서 값을 마이그레이션하지 않습니다. 나중에 INTERN을 실행하면 (LOAD는 INTERN을 호출 함), 사용자 컨텍스트에서 기존 단어를보고 사용자 단어이기 때문에 무시하지 않습니다. 기본적으로 사용자 컨텍스트는 시스템 컨텍스트 및 내보내기 컨텍스트로 채워지지 않으며 필요시 채워집니다. 시스템 값을 원하면 처음부터 INTERN을 사용하는 것이 좋습니다. – BrianH