О кешировании. Поговорим про добавление вложенных элементов.
Предыдущая серия была тут - http://programmingmindstream.blogspot.ru/2015/12/1148.html.
Там мы поговорили про внутреннее устройство слов словарей.
А также обсудили возможность получения внутренних элементов слов по их имени.
И там у нас возник вопрос:
Теперь возникает закономерный вопрос - "а если мы можем получать внутренние элементы слов, то можем ли мы добавлять новые элементы?"
Ответ - "да можем".
Как?
Сейчас мы это рассмотрим.
Мы уже рассмотрели слова %% и ::. Теперь рассмотрим слово ->.
Вот его определение:
Тут даже два слова определено - ->^ и ->.
Слово ->^ - мы рассмотрим позднее.
А пока приведём пример использования слова ->:
Что тут делается?
Тут сначала объявляется слово A.
Потом ему добавляется переменная X. И ей присваивается целочисленное значение "2".
Потом получается ссылка на переменную X слова A. И затем печатается его значение.
Что мы имеем?
Мы имеем тот факт, что в наших скриптах присутствует рефлексия.
Т.е. мы из скриптов умеем управлять кодом самих же скриптов.
Кроме возможности добавления переменных словам скриптов мы имеем ещё другие возможности получения и побавления мета-информации о словах.
Это мы рассмотрим в следующей статье.
Предыдущая серия была тут - http://programmingmindstream.blogspot.ru/2015/12/1148.html.
Там мы поговорили про внутреннее устройство слов словарей.
А также обсудили возможность получения внутренних элементов слов по их имени.
И там у нас возник вопрос:
Теперь возникает закономерный вопрос - "а если мы можем получать внутренние элементы слов, то можем ли мы добавлять новые элементы?"
Ответ - "да можем".
Как?
Сейчас мы это рассмотрим.
Мы уже рассмотрели слова %% и ::. Теперь рассмотрим слово ->.
Вот его определение:
OBJECT operator ->^ ^@ IN aSelf ^ IN aName STRING VAR l_Name aName DO >>> l_Name OBJECT VAR l_Self aSelf |^@ >>> l_Self if ( l_Self pop:object:IsNil ) then begin nil >>> Result end else begin VAR l_NewVar l_Name l_Self pop:NewWordDefinitor:CheckWord pop:KeyWord:Word >>> l_NewVar if ( l_NewVar pop:object:IsNil ) then ( l_Name false l_Self pop:NewWordDefinitor:CheckVar >>> l_NewVar Ctx:ClearTypeInfo @ VAR l_NewVar pop:Word:SetProducer ) l_NewVar >>> Result end // l_Self pop:object:IsNil ; // ->^ ^@ operator -> ^@ IN aSelf ^L IN aName aSelf ->^ ( aName |N ) >>> Result ; // ->
Тут даже два слова определено - ->^ и ->.
Слово ->^ - мы рассмотрим позднее.
А пока приведём пример использования слова ->:
: A ; // A A -> X := 2 // Добавляем слову A переменную X и присваиваем ей целочисленное значение "2". X -> X Print // Печатаем значение переменной X слова A.
Что тут делается?
Тут сначала объявляется слово A.
Потом ему добавляется переменная X. И ей присваивается целочисленное значение "2".
Потом получается ссылка на переменную X слова A. И затем печатается его значение.
Что мы имеем?
Мы имеем тот факт, что в наших скриптах присутствует рефлексия.
Т.е. мы из скриптов умеем управлять кодом самих же скриптов.
Кроме возможности добавления переменных словам скриптов мы имеем ещё другие возможности получения и побавления мета-информации о словах.
Это мы рассмотрим в следующей статье.
Комментариев нет:
Отправить комментарий