parser

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

 

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

"меня терзают смутрые сомнения"

Misha v.3 01.04.2012 09:57 / 01.04.2012 10:03

если приоритет && выше чем приоритет ||, то следующий код:
@main[]
$h[^hash::create[]]
^if(^m[1] || ^m[2] && ^m[3]){true}{false}<br />
^p[]


@m[k]
$h.[m$k][1]
$result(true)


@p[][k]
^h.foreach[k;]{$k}[, ]
сначала должен вызываться ^m[2], потом ^m[3] (если результат вызова ^m[2] == true), и лишь потом ^m[1] (хотя последний вызов без надобности).
однако на деле оказывается вызван лишь ^m[1].

в доке у || и && указано: "второй операнд не вычисляется, если первый - истина" и "второй операнд не вычисляется, если первый - ложь".

я продолжаю настаивать, что в parser у ||, && и !|| приоритет одинаков и даные операторы выполняются слева направо :)

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