parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Задача с контекстом caller - запрос фичи

nkostya 24.11.2022 18:41

Пишу метод @foreach[aArray;sVar;jCode]
поведение простое - перебор элементов aArray, значение каждого итерационно доступно в $caller.[$sVar][$array_item]

Вызов примерно такой ^foreach[$array;item]{$item.id}

Проблема:
Если до вызова foreach была определена переменна item, то после выполнения foreach ее значение будет изменено на последний элемент array.

Хотелось бы иметь возможность сохранить значение item после вызова.

Т.к. выполнение jCode происходит в контексте вызова и управлять видимостью переменных я не могу, то появляется идея сохранить $_oldVal[$caller.$sVar] до вызова и восстановить после завершения цикла $caller.[$sVar][$_oldVal]

В принципе эта схема работает, но есть одно но!

$caller.$sVar идет по всем родительским классам (если вызов из объекта) и ищет эту переменную.

Хотелось бы ограничить получение переменной только конекретным контекстом.
И для этого даже есть ^reflection:field[объект;имя поля]
* в документации указано - "Внимание: поиск полей по иерархии классов не производится."

Но только работает оно для Объекта и Класса. А $caller как контекст всегда возвращает "void".

Можно ли сделать возможность передавать $caller в качестве аргумента для reflection:field или есть другие варианты решения моей проблемы?


* При поиске наткнулся на странное поведение, думаю это баг:
^reflection:is[$sVar;void;$caller] - будет Exception

  • Задача с контекстом caller - запрос фичи, nkostya 24.11.2022 18:41