Что означает ошибка "слово не связано с контекстом"?

Экспериментируя со словами из Rebol 3, я столкнулся со следующей ошибкой.

>> set to lit-word! "g" 4
** Script error: 'g word is not bound to a context
** Where: set
** Near: set to lit-word! "g" 4

Это кажется довольно сложным из-за следующих результатов:

>> to lit-word! "g"
== 'g
>> set 'g 4
== 4

Мне было интересно, как слово не может быть связано с контекстом, когда оно выглядит идентично приведенному выше...

1 ответ

Решение

В Rebol 3 есть определенное поведение консоли и скриптов, которые важно понимать:

Все, что вы вводите, loadпод ред. Ребола. Когда он является loadЭд, это помещено в контекст.

Если я наберу:

b: 4
set 'b 5

Есть существующее слово b или же 'b без какого-либо кода / данных, которые оцениваются, который помещается в system/contexts/user контекст, поэтому он имеет привязку к этому контексту.

>> bound? 'b
== make object! [
    system: make object! [
        version: 2.101.0.3.1
        build: 31-May-2013/18:34:38
        platform: [
            Windows win32-x86
        ]
        product: 'saphir-view
        license: {Copyright 2012 REBOL Technologies
            REBOL is a trademark of REBOL Technologies
            Licensed under the Apache License, Version 2.0.
            See: http://www.apache.org/licenses/LICENSE-2.0
        }
        catalog: make object! [
            datatypes: [end! unset! none! logic! integer! decimal! percent! mo...

И чтобы показать это в том же контексте:

>> same? (bound? 'b) system/contexts/user
== true

Тем не менее, когда вы печатаете to-word "b", все это load видит это слово to-word и строка. Так что в этом случае load добавляет to-word слово для system/contexts/user но ничего не происходит с привязкой b потому что он не был загружен.

>> bound? to word! "b"
== none

Более того, to word! (или же to lit-word!и т. д.) при оценке ничего не связывает. Это связывание должно быть сделано вручную.

См. Как слова связаны в модуле Rebol? для дополнительной информации

Другие вопросы по тегам