parser

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

 

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

жесть

Misha v.3 12.05.2011 02:02 / 12.05.2011 06:26

в общем фишка в том, что bool можно сравнить с int/double двумя способами:
1. привести int к bool и результат сравнить с bool ((42 => true) == true) -> true
2. привести bool к int и результат сравнить с int (42 == (true -> 1)) -> false

по коду ожидается первый вариант, но по факту работает второй (т.е. switch сравнивает или string-и или double-ы).
т.е. true превращается в 1.0 и далее эта единица сравнивается с вариантами всех case: с 42 и 0 (!42 -> 0).

понятно, что ничего не находится и срабатывает DEFAULT.

наверное надо будет изменить логику и в случае присутствия в switch значения типа bool, действовать по первому варианту.

а пока:
^case($answer){true}
=>
^case(^answer.bool[]){true}
или
^case($answer!=0){true}
или
^case(!!$answer){true}