REBOL 3 - Где можно получить доступ к определенным пользователем словам пространства имен?

Допустим, я определяю несколько слов:

Word1: 5
Word2: "blahdiddyblah"

Есть ли какая-то часть или блок системы, в котором хранятся используемые слова?

Пробовал что-то вроде этого, но не получилось:

S1: to-block copy system/contexts/user

D: 3

S2: to-block copy system/contexts/user

Difference s1 s2

Согласно предложению @johnk, я пробовал:

>> snapshot-of-words: words-of system/contexts/user
== [system snapshot-of-words words-of contexts user]

>> x: 1
== 1

>> difference snapshot-of-words words-of system/contexts/user
== [x difference]

>> difference snapshot-of-words words-of system/contexts/user
== [x difference]

>> 5 + 9
== 14

>> form ["hellow" "there" ]
== "hellow there"

>> difference snapshot-of-words words-of system/contexts/user
== [x difference + form]

Что это значит? собственные функции связаны с контекстом пользователя после использования? Есть ли способ изолировать их от тех, которые пользователь может связать?


person kealist    schedule 18.07.2013    source источник
comment
любые используемые встроенные слова становятся связанными в контексте пользователя, будь то в скрипте или консоли   -  person kealist    schedule 18.07.2013
comment
с использованием LOAD-GUI намного сложнее, потому что он связывает очень много разных слов   -  person kealist    schedule 18.07.2013
comment
проверка до или после load-gui бесполезна для того, что я пытаюсь сделать   -  person kealist    schedule 18.07.2013
comment
Графический интерфейс Rebol 3, загруженный load-gui, еще не был модульным, поэтому я ожидаю, что в пользовательский контекст будет просачиваться много слов. Не думайте, что какие-либо слова, которые вы найдете, намеренно просочились, если они не задокументированы, а может быть, даже и в этом случае. Если вы пытаетесь помочь им убрать вещи, это было бы круто.   -  person BrianH    schedule 19.07.2013


Ответы (1)


Когда вы используете слова в сценарии (каждая командная строка, которую вы вводите в интерактивном режиме, представляет собой отдельный сценарий), эти слова добавляются к system/contexts/user, пользовательскому контексту. Простое наличие слов в сценарии добавляет их в пользовательский контекст, вот и все необходимое «использование». Если какие-либо из этих новых слов уже существуют в lib, библиотеке времени выполнения, то слова пользовательского контекста получают свои начальные значения, присвоенные значениям, которые эти слова имеют в библиотеке времени выполнения в данный момент.

В вашем примере кода, когда вы используете слово form в своем скрипте, оно добавляется в пользовательский контекст. Затем form присваивается значение, которое lib/form присваивается в то время. С этого момента form является пользовательским словом, а системным словом является lib/form.

Единственный раз, когда значения слов распространяются из lib в пользовательский контекст, это когда это слово впервые добавляется в пользовательский контекст и ему присваивается его начальное значение. После этого, если вы хотите, чтобы какие-либо изменения в версии lib этого слова превратились в версию этого слова в пользовательском контексте, вы должны назначить ее самостоятельно. Если они будут иметь одно и то же значение в дальнейшем, то это просто потому, что вы не присвоили новое значение ни пользовательскому, ни системному слову.

Все слова в пользовательском контексте — это слова, созданные пользователем, даже те, которые были инициализированы из lib. Пользователь создал эти слова, когда поместил их в пользовательские скрипты. В этом весь смысл пользовательского контекста. Итак, если вы используете print в своем скрипте, это пользовательское слово, ничем не отличающееся от любых других пользовательских слов.

Вы можете посмотреть здесь более подробную информацию: Как слова, связанные внутри модуля Rebol? И здесь тоже: Каковы общие различия в поведении связывания между Rebol 2 и 3?

person BrianH    schedule 18.07.2013
comment
Спасибо за объяснение - очень полезно. Пытаюсь сделать себе некую отладочную IDE. RE: LOAD-GUI Возможно, я немного новичок, чтобы понять преднамеренность/непреднамеренность утечки слов в пользовательский контекст, но я посмотрю, что смогу выяснить. - person kealist; 19.07.2013