ibash.org.ru - Новый цитатник Рунета

Форум: Тернарые ? операторы : perl ? python : ruby ? php : wtf?; [RSS]

Форум: Вход Регистрация Участники Поиск RSS

Shock
23.04.2009 - 19:38

Тернарые ? операторы : perl ? python : ruby ? php : wtf?;

shock@shock:~$ perl -e "print 1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9"
2
shock@shock:~$ python -c "print 2 if 1 else 4 if 3 else 6 if 5 else 8 if 7 else 9"
2
shock@shock:~$ ruby -e "print 1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9"
2
shock@shock:~$ php -r "echo 1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9;"
8
shock@shock:~$ WTF ?
bash: WTF?: команда не найдена

PS. Java, C++ тоже вернули бы 2.

Shock
#1 - 23.04.2009 - 19:38

В чем причина? Возможно, оно работает так:


PHP:
1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9 =>
(((1 ? 2 : 3) ? 4 : 5) ? 6 : 7) ? 8 : 9 =>
true ? 8 : 9 =>
8


Другие языки:

Мое предположение:
1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9 =>
1 ? 2 : (3 ? 4 : 5 ? 6 : 7 ? 8 : 9) =>
2

Предположение Xenius'a (наверное, более верное)
1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9 =>
1 ? 2 : 3 ? 4 : 5 ? 6 : (7 ? 8 : 9 == 8) =>
1 ? 2 : 3 ? 4 : (5 ? 6 : 8 == 6 ) =>
1 ? 2 : (3 ? 4 : 6 == 4) =>
1 ? 2 : 4 =>
2

naryl
#2 - 24.04.2009 - 00:33

Глобальный И Надёжный вычисляет тернарный оператор справа налево, а Языки Программирования - слева направо.

Shock
#3 - 04.03.2011 - 08:41

http://habrahabr.ru/blogs/php/114899/
К списку вопросов

Быстрый ответ
Имя:      Пароль:    
Текст сообщения:

«ibash.org.ru — Новый цитатник Рунета» Почта вебмастера: imail@ibash.org.ru