| Новости | 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