Что означает ошибка "слово не связано с контекстом"?
Экспериментируя со словами из 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? для дополнительной информации