четверг, 10 декабря 2015 г.

#1149. О кешировании. Поговорим про добавление вложенных элементов

О кешировании. Поговорим про добавление вложенных элементов.

Предыдущая серия была тут - 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. И затем печатается его значение.

Что мы имеем?

Мы имеем тот факт, что в наших скриптах присутствует рефлексия.

Т.е. мы из скриптов умеем управлять кодом самих же скриптов.

Кроме возможности добавления переменных словам скриптов мы имеем ещё другие возможности получения и побавления мета-информации о словах.

Это мы рассмотрим в следующей статье.



Комментариев нет:

Отправить комментарий