這可能是一個小點,但我想知道爲什麼Perl的邏輯運算符(&&
,||
和!
)優先於易於理解的「英語」邏輯運算符(and
,or
和not
)。使用前一組和使用後一組的缺點是否有利於腳本?爲什麼Perl的邏輯運算符&&,||,!優先於,或,而不是?
回答
如果||
和or
具有相同的優先級,然後
return some_func $test1 || $test2;
將意味着
return some_func($test1) || $test2;
,而不是
return some_func($test1 || $test2);
或
some_func $test1 or die;
將意味着
some_func($test1 or die);
代替
some_func($test1) or die;
無論這些變化是可取的。
雖然人們可以辯論or
比||
更容易理解,但它很難閱讀。當操作員看起來不像操作數時,讀代碼更容易。
原來的&&
,||
和!
運算符的優先級高,以匹配C語言。
新增(但仍舊)and
,or
和not
運算符被添加以簡化一些常見構造。例如,比較:
open my $fh, '<', $filename || die "A horrible death!";
open my $fh, '<', $filename or die "A horrible death!";
第一個錯誤;高優先級||
與$filename
和die
綁定,這不是您想要的。第二個是正確的;低優先級or
意味着缺少的括號不會導致歧義。
+1,因爲這是Larry Wall在編程Perl *中給出的實際原因。 – 2013-03-04 03:01:31
轉換評論一個答案:
如果這些經營者在偏好相同,那就沒有必要保留兩個版本 - 只有一個版本就足夠了。
但Larry Wall是一位語言學家,他非常喜歡在他的新語言中使用簡單的英語單詞。於是,他介紹了這些英文風格的運營商(與unless
等一起)。
爲了保持C風格的操作符及其經典含義,他需要使新的關鍵字不是多餘的。正因爲如此,他給這些運營商賦予了稍微不同的含義,他更喜歡。所以這種差異變成了運營商的優先權。
這不是事實:這與拉里對英語單詞的偏愛毫無關係。除了'&&'和'||'之外,''和'和'or'純粹是爲了給相同的運算符提供較低的綁定優先級。它們在Perl中特別有用,因爲函數調用不需要參數周圍的括號。 – Borodin 2013-03-04 03:04:40
這不就是我說的嗎?如果它們的優先級相同,'和'和'或'今天就不存在了。而英式風格的結構確實提供了更大的靈活性,我不是在爭辯,要麼 – mvp 2013-03-04 03:06:55
不,這不是你說的。 *「[拉里沃爾]真的很喜歡在他的新語言中使用簡單的英語單詞,因此,他介紹了這些英語風格的操作員......他需要使新的關鍵字不會冗餘\ \ [他\]分配略有不同的含義他更喜歡的運營商。「*是童話廢話。 – Borodin 2013-03-04 03:23:43
- 1. 邏輯運算符:是和優於或?
- 2. 優先邏輯運算符的
- 3. 邏輯運算符優先級
- 4. 優先級和邏輯運算符
- 5. 邏輯運算符和優先級
- 6. 哪個邏輯運算符優先
- 7. perl的邏輯或運算
- 8. 什麼是短circut邏輯運算符的優先(和關聯)在bash
- 9. 邏輯運算符AND的優先級高於IN
- 10. 什麼是NOR邏輯運算符?
- 11. 邏輯運算符優先於NAND,NOR,XNOR
- 12. 邏輯運算符什麼都不做的名字是什麼?
- 13. 爲什麼java的恢復邏輯運算符,而編譯
- 14. 邏輯或優先級
- 15. 邏輯運算符或者
- 16. 「?」類型修飾符優先與邏輯和運算符(&)vs地址運算符(&)
- 17. 運算符優先於php
- 18. java的運算符優先級DOT VS邏輯與
- 19. JavaScript的運算符優先級邏輯混淆了我
- 20. XPath的邏輯運算符優先級,沒有括號
- 21. 是什麼邏輯運算符「不是」 EL
- 22. 如果邏輯運算優先級的評估爲C組合
- 23. 優先級和結合在邏輯運算符用C
- 24. 數學VS邏輯運算符優先級
- 25. 爲什麼不是和!在MySQL 5中有不同的運算符優先級?
- 26. 比較運算符和邏輯運算符有什麼區別?
- 27. 2列的邏輯運算(邏輯或)
- 28. 運算符優先級在C相同的邏輯不同的輸出
- 29. XPath中的運算符的優先級是什麼?
- 30. Java中的+(加號)運算符的優先級是什麼?
因爲Larry Wall喜歡那樣嗎? – mvp 2013-03-04 01:51:11
如果它們的偏好相同,則不需要保留兩個版本 - 只有一個版本可以保留。由於拉里是一位語言學家,並且喜歡在他的新語言中使用簡單的英語單詞,所以他介紹了這些內容(除非另有說明)。當然,他給這些詞賦予了意義,他更喜歡(並且與C風格的操作員不同) – mvp 2013-03-04 02:44:49