Интересно как они тогда сделали `1 <= $x <= 11` в Perl6? По идее для такого оператора нужно хитрое поведение: оператор в булевом контексте возвращает true или false, но результат для дальнейших вычислений значение $x. Или просто False всегда False в любых операторах сравнения?
2015-11-28 23:52 GMT+03:00 Victor Efimov <[email protected]>: > http://www.nntp.perl.org/group/perl.perl6.language/2000/08/msg1104.html > > It would be nice to be able to say > > @a = @b || @c > > instead of having to resort to > > @a = @b ? @b : @c > > The reason that it is not currently possible is that C<@b> (or the list > expression in its place) has to be evaluated in scalar context to determine > whether to evaluate C<@c>, and that propagating context to C<@b> would > require reevaluating it, which might have undesirable side effects (instead > of C<@b>, it might be C<decrement_balance()>). > > > 29 ноября 2015 г., 3:27 пользователь Eugen Konkov <[email protected]> > написал: > > Всем привет. > > > > Недавно работая с || наткнулся на то, что оператор возвращает не то, что > предпологалось. Покопавшись в документации - нашел, что он работает именно > так, а не так как ожидается: > > > > @a = @b || @c; # this is wrong > > @a = scalar(@b) || @c; # really meant this > > @a = @b ? @b : @c; # this works fine, though > > > > И мне кажется, что было бы намного лучше, если бы этот || работал > наподобие: > > sub OR { > > my( $left, $right ) = @_; > > > > if( wantarray ) { > > @result = $left->(); # list > > return @result if scalar @result; > > > > return $right->(); > > } > > else { > > $result = $left->(); # scalar > > return $result if $result; > > > > return $right->(); > > } > > } > > > > > > @l = foo() OR bar(); # foo is called in list context > > $s = foo() OR bar(); # foo is called in scalar context > > > > т.е. если || вызыван в списковом контексте, то левый операнд вычислять > в списковом и возвращать список, > > если || вызван в скалярном - соответственно левый операнд вычислять тоже > в скалярном и возвращать скаляр. > > > > Что скажете: "жить" будет легче или нет? > > > > -- > > Eugen mailto:[email protected] > > > > -- > > Moscow.pm mailing list > > [email protected] | http://moscow.pm.org > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Best regards, Ruslan.
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
