parserALT
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 600 | Дальше →

Даосская троичная логика?:)

#1Саян
11.05.11 19:57
www.parser.ru → | ответить → | в избранное →

Даосская троичная логика?:)

$answer(42)
^switch(true){
^case($answer){true}
^case(!$answer){false}
^case[DEFAULT]{!true && !false}
}
Вы не поверите...
#2Misha v.3
→ Саян [#1] | 12.05.11 02:02 / 06:26
www.parser.ru → | ответить → | в избранное →

жесть

в общем фишка в том, что 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}
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 600 | Дальше →