Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Sumo 10.12.2014 09:19 / 10.12.2014 09:32
Т.е. для функций вида ^func[var;...]{code}. Самые распространенные случаи, когда это нужно — итераторы и обертки над ресурсами (примерный аналог оператора with в Питоне).@steppedfor[name;from;to;step;code] $caller.$name($from) ^while($caller.$name<=$to){ $code ^caller.$name.inc($step) }В данном случае мы делаем так, чтобы код, который записан в контексте вызывающего метода получил доступ к переменной-счетчику, которую мы итерируем в steppedfor. Для этого мы записываем значение счетчика в контекст вызывающей функции через caller.
@tempFile[aPath;aVarName;aCode][lTempFileName] ## Формирует на время выполнения кода aCode уникальное имя для временного ## файла в папке aPath. После работы кода удаляет временный файл, если он создан. ^pfAssert:isTrue(def $aVarName)[Не задано имя переменной для названия временного файла.] ^try{ $lTempFileName[^aPath.trim[end;/\]/${status:pid}_^math:uid64[].tmp] $caller.[$aVarName][$lTempFileName] $result[$aCode] }{}{ ^if(-f $lTempFileName){ ^file:delete[$lTempFileName] } }http://code.volchkov.net/parser3-pf/src/9978cc47944d17d69c19652c6ae5d02816b56926/io/pfOS.p?at=pf