Здравствуйте.
Alexey Naidyonov wrote:
>On Mon, 2006-10-23 at 10:57 +0400, Oleg Shumsky wrote:
>
>
>
>>Уважаемые гуру, объясните пожалуйста русским языком логику работы
>>конструкций с использованием and then и or else.
>>
>>
>
>Да там все предельно просто: and и or всегда вычисляют оба предиката,
>and then и or else вычисляют правый предикат только при необходимости.
>
>
А зачем в случае and вычислять оба предиката, если первый не соответствует условию? Тоже самое и с or, зачем вычислять второй, если первый соответствует условию? Хотя, это уже вопрос не к вам конкретно.
>> if IsDictionary(input) and input.what == "stop" then syslog("blabla");
>>stop; end if;
>>
>>
>
>Вот если в CG/PL написать так, то получится ошибка -- потому что
>вычислить второй предикат не получится, это не словарь. Я подозреваю,
>что на самом деле Ваш вопрос звучит так: "Почему операторам and и or
>нельзя было назначить обычную сишную семантику?". Я не буду отвечать за
>авторов, но замечу, что оператор с вычислением обоих предикатов тоже
>бывает полезен, хотя, при желании, может сильно запутать логику кода для
>невнимательного читателя.
>
>
Ну в общем-то да :) Сишный вариант как-то более понятен. Если учесть еще, что в cg/pl нужно еще помнить, где какой оператор в каком случае возвращает null, а в каком нет, то мозг расплавляется :)
>Кстати, никто не заставляет писать "and then" и "or else":
>"The && sign can be used instead of the and then keywords. ... The ||
>sign can be used instead of the or else keywords."
>
>Пишите if IsDictionary(input) && input.what == "stop" -- и получите
>знакомый оператор со знакомой семантикой "как в C".
>
>
вот наверное так и поступлю. Спасибо.
-- Oleg V. Shumsky Corbina Telecom NOC, VoIP Dept. Ph.: +7 495 7284000, ext. 2174, ICQ: 110474048Получено Mon Oct 23 07:41:10 2006
Этот архив был сгенерирован hypermail 2.1.8 : Mon 23 Oct 2006 - 12:13:24 MSD