2009-09-16 12 views

Odpowiedz

15

Domyślam się, że jest to bezpośrednie przeniesienie z Perla. Operatory or i and zostały dodane później w Perlu 5, dla szczególnych sytuacji pożądany był niższy priorytet.

Na przykład w Perlu, tutaj chcemy że || miał niższy priorytet, tak, że możemy napisać:

try to perform big long hairy complicated action  || die ; 

i mieć pewność, że || nie zamierza pochłaniają część akcji. Perl 5 wprowadził nową wersję or, która ma niski priorytet, właśnie w tym celu.

Przykładem w Ruby, gdzie można użyć or ale nie ||:

value = possibly_false or raise "foo" 

Jeśli użyto ||, byłby to błąd składni.

+0

Czy istnieje nazwa idiomu do_something lub die? Czy używa się go w rubinach? –

+0

Nie znam żadnej nazwy, ale jest dość powszechne w Ruby. – Chuck

+0

Perl pochyla się ciężko na kostce, podczas gdy Ruby używa podbicia. Zaletą wyjątku jest to, że możesz go uratować. – tadman

4

Możliwość kontrolowania pierwszeństwa operatorów jest czasem przydatna, szczególnie jeśli chodzi o czytelność - dodatkowy nawias w instrukcjach warunkowych może czasami zaciemniać rzeczywistą logikę.

Uważam jednak, że powód, dla którego Ruby ma najwyższy poziom boolowskich operatorów, wynika przede wszystkim z faktu, że Matz był programistą Perla, zanim jeszcze napisał Rubiego, i pożyczył wiele podstawowych składni i operatorów od ten język.

+0

hmm, to wyjaśnia, dlaczego rubin jest tak niedojrzały, a jednocześnie tak rozdęty. Wciąż ciężko owinąć mi głowę ... – akostadinov

5

Mają bardzo niski priorytet, dlatego operandy nie muszą być zawijane w nawiasy, jak to czasami bywa w przypadku && i ||.

2

Uważam, że pomysł polega na tym, aby umieścić je poniżej operatorów przydziału, dzięki czemu można pisać testy logiczne z zadaniami, ale bez parens.

7

Różnica jest ważniejsza. ||, && mają wyższy priorytet niż =, ale and, or mają niższe. Tak więc, można zrobić:

a = nil || 0 

Trzeba by zrobić:

a = (nil or 0) 

aby uzyskać ten sam efekt. Jeśli wykonasz:

a = nil or 0 

Wynik wyrażenia będzie nadal wynosił 0, ale wartość będzie zerowa.

Powiązane problemy