回答
的不同之處在於| (單管)是按位或和|| (雙管)是邏輯或 ||是邏輯OR運算符。這聽起來像你基本上知道那是什麼。它用於if,while等條件語句中。
condition1 || condition2
「||」將從第一個開始依次檢查。如果順序中的任何條件被發現是真的,則||停止進一步檢查在條件聲明中效率更高
|是按位或運算符。它用於對兩個數字進行操作。您可以分別查看每個數字的每個位,如果其中至少一個數字中的某個位爲1,則結果位也爲1。以下是一些示例:
A = 01010101
B = 10101010
A | B = 11111111
A = 00000001
B = 00010000
A | B = 00010001
'^ 1'好的,很好的解釋。 –
@Shanukk我理解按位運算符是如何工作的,但我不明白版本約束有什麼區別。看看兩個例子 _^1.5.0 |^2.0.0_和 **^1.5.0 || 2.0.0 **。 _^1.5.0_只能返回true或false,對嗎? **^2.0.0 **也只能返回true或false,對嗎? 所以,沒有區別: _bool | bool_ AND ** bool ||布爾**。 對不對? 如果是,有什麼區別?如果否,那麼composer.phar中兩個不同操作符的原因是什麼? – Roman678
在composer.phar版本約束中,'|'和'||'沒有區別 – Ostin
我認爲這是作曲家或邏輯運算符的舊語法。 我發現這個參考:http://qpleple.com/understand-composer-versions(搜索管道字符)
在介紹它說:
以下是作曲家的文檔重組,以 更好一些提取了解軟件包版本穩定工作
但我在當前的作曲家文檔中找不到任何參考,那麼我認爲這是來自舊版本的文檔
他們是一樣的。
如果你看看VersionParser類(https://github.com/composer/semver/blob/1dd67fe56c0587d0d119947061a6bfc9863c101c/src/VersionParser.php#L237),你可以看到下面的代碼:
$orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints));
正如我們在正則表達式看到,他們是?在第二根管之後,使其成爲可選項。
似乎只有雙管道記錄。 (https://getcomposer.org/doc/articles/versions.md#range)
單個管道已被棄用,但爲了向後兼容而保留。你的preg_split參考是現貨。 – Scriptonomy
- 1. chrome.webNavigation.onCompleted和chrome.tabs.onUpdated.addListener與'complete'之間的區別
- 2. req.session與req.app和app.set之間的區別
- 3. 更新與NULL和''之間的區別?
- 4. char *和char []與strcpy()之間的區別()
- 5. BlackBerry與OTAInstall和StandardInstall之間的區別
- 6. 「或」與「||」之間的區別?
- 7. ~~與Math.floor之間的區別()
- 8. 關注與責任之間的區別(即SRP和SoC之間的區別)?
- 9. 之間的〜/和的區別../
- 10. '#','%'和'$'之間的區別
- 11. {!!之間的區別!!}和{{}}
- 12. '+ ='和'= +'之間的區別?
- 13. 「。+」和「。+?」之間的區別
- 14. .eq之間的區別。和==
- 15. #。/和#之間的區別。 ./
- 16. !=和!之間的區別==
- 17. 「%〜dp0」和「。\」之間的區別?
- 18. | =和^ = css之間的區別
- 19. 之間的區別。和#
- 20. ==和case之間的區別?
- 21. 「**/* /」和「** /」之間的區別?
- 22. jQuery - '。'之間的區別和「#」
- 23. 「?1」和「?」之間的區別
- 24. `%in%`和`==`之間的區別
- 25. fmod和%之間的區別
- 26. 之間的區別:+和:+
- 27. PAM與Metis分區之間的區別
- 28. 與別名之間的區別
- 29. 時間()與stime()之間的區別
- 30. 指令與模板之間的區別與沒有模板和Angular 1.2和1.1之間的區別?
從我發現,他們是一樣的。可能並不正確 – Antony
||它被視爲合乎邏輯OR –
@Shanukk ok,那麼邏輯或單管道之間的區別是什麼? – Roman678