2012-11-27 9 views
6

Na przykład w „Programowanie Perl”, są zdania, takie jak ten:Co to znaczy, że operator wiąże się w Perlu?

Te operatory łańcuchowe wiążą tak mocno, jak odpowiadające im operatory arytmetyczne.

W innych miejscach, zarówno w "PP", jak iw perldoc, autorzy stosują frazowanie, takie jak "ściśle wiąże"; na przykład, odnosząc się do = ~ lub "wiąże się jeszcze mocniej" w odniesieniu do ** (potęgowanie).

Gdyby to było to samo, co pierwszeństwo, nie byłoby możliwe mówienie rzeczy "jeszcze mocniej", zgaduję. Powiedziałbyś zamiast tego "wyższy/niższy priorytet".

Co więc oznacza dla operatora wiązanie?

+0

TLP, że wspomniane poszczególnych operatorów w ostatnich dwóch przypadkach. W pierwszym cytowanym zdaniu operatory były mnożeniem (*) i mnożeniem ciągu (x). Jestem zdezorientowany wyborem słów, które opisują pierwszeństwo operatora (jeśli tak właśnie jest), stąd moje pytanie. – minya

+3

Jestem prawie pewien, że jest to pierwszeństwo. – TLP

Odpowiedz

8

Dotyczy to pierwszeństwa operatora. W wyrażeniu:

Mnożenie ma wyższy priorytet, a zatem "wiąże" ściślej niż dodawanie.

Operatory, które wiążą się ściślej, są oceniane przed mniej ściśle związanymi operatorami.

+0

Również dzięki osobie, która wyjaśniła semantykę czasownika wiążę dla mnie, ale później skasowałem komentarz; i do @TLP za poświęcenie czasu na wyjaśnienia. – minya

6

Możesz zajrzeć do precedence list w dokumentacji i porównać ją z czytanymi tekstami. Jestem jednak pewna, że ​​mówią o pierwszeństwie.

Pierwszeństwo jest formą wiązania, ponieważ "klei" argumenty razem z inną siłą. A ludzie Częstym błędem zrobić, na przykład, przy użyciu:

open my $fh, "<", "input.txt" || die $!; 

który jest cichy i śmiertelny błąd, ponieważ || „wiąże mocniej”/ma wyższy priorytet niż przecinek , operatora, więc to wyrażenie staje:

open my $fh, "<", ("input.txt" || die $!); 

A ponieważ ciąg "input.txt" jest zawsze prawdziwy, niezależnie od tego, ponieważ jest to stała, instrukcja die nigdy nie jest używana. A zatem instrukcja open może nie działać bezgłośnie, co prowadzi do trudnych do znalezienia błędów.

(Rozwiązaniem jest użycie dolną operatora pierwszeństwo or zamiast || lub jako mob wskazuje zastąpić pierwszeństwo przy użyciu nawiasów).

+0

Lub, od TMTOWTDI, rozwiązaniem jest użycie nawiasów. – mob

+0

@mob Cóż, to było rozwiązanie związane z kontekstem. – TLP