parser

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

 

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

Контекст всегда внутри текущей функции...

Sumo 03.01.2014 13:28 / 03.01.2014 13:34

Если необходимо обратиться к контексту вызывающей функции, то используем переменную caller текущего контекста. Т.е. мы можем «перенести» часть нашего контекста в контекст вызывающей функции, присвоив там какой-то переменной значение из нашего контекста. Таким образом формируется замыкание.

Тут важно понимать, что выражение всегда имеет смысл только в контексте конкретного вызова той функции, где оно написано. Иными словами — контекст имеет короткий срок жизни. Если мы в функции присвоили код внешней переменной и вышли из функции, то контекст пропадает и код становится неработоспособным. Оператора yeld в Парсере нет. :)
Если в вашем примере модифицировать методов одним из следующих способов, выражение всегда получается ложным
В вашем коде никаких проблем с контекстами нет, а есть две очевидные логические ошибки.
$aConditions($k % 2 && $aConditions)
В данном случае вы на первой итерации присваиваете $aConditions значение tue или false. И на каждой следующей итерации используете это значение, а не то выражение, которое написано в вызывающей функции. Если на первой итерации aConditions == false, то на всех следующих ваш код бeдет выдавать false, если true, то все завсит от индекса первого элемента хеша, но на второй итерации опять получим false и дальше все сводится к первому случаю.
@selectOdd[aHash;aKeyVar;aValueVar;aConditions][locals]
$extra($k % 2)
Здесь переменная k не определена и в extra мы получим 0, а значит и в выражении ($extra && $aConditions) до вычисления aConditions даже не дойдет и выражение всегда будет ложным.