понедельник, 8 февраля 2021 г.

Добавил массив значений и особый случай адресации $*

 Добавил массив значений типа Value (то есть любого типа), а также особый случай адресации стека $* (все значения данного фрейма) и $$* (все значения предыдущего фрейма).

Стек огромного размера

Дело в том, что оператор $* предполагает два варианта использования: либо все значения на стеке нужно скопировать, либо поместить их в массив.

Например, если написать команду

$*

то это будет означать, что мы хотим продублировать все значения на стеке. 

А например команда

$* xxxx

будет означать, что мы хотим взять все значения на стеке как массив значений [], и для этого массива нужно выполнить команду xxxx.

Это позволит написать что-нибудь вроде:

zzz set_data [
     $$*
]

То есть скопировать все значения из предыдущего фрейма стека, поместить их в массив и передать в качестве параметра методу set_data объекта с именем zzz

Но ведь писать такое каждый раз совершенно не хочется. Поэтому я предусмотрел особый случай использования $*, так что можно будет просто написать:

zzz set_data $*

Вы, возможно, спросите: а как работать с массивом, если синтаксис допускает только один параметр у функции?

На этот случай я придумал интересный трюк. Индекс массива я хочу сделать именем свойства, значением которого выступает элемент массива. То есть:

my_array 2 set "xxxx"

Для элемента массива my_array с индексом 2 вызывается метод set с параметром "xxxx".

Круто, но я пока за это не брался. Там нужно придумать, как это реализовать. 

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