2017-02-01 16 views
6

Sự khác nhau giữa đường ống và ống douoble trong tệp composer.json là gì? Ví dụ:Composer.phar sự khác biệt giữa | và ||

"^1.0.0 || ^2.0.0" 

'^1.0.0|^2.0.0' 
+0

Từ những gì tôi tìm thấy, chúng giống nhau. Có thể không đúng mặc dù – Antony

+0

|| nó được coi là hợp lý HOẶC –

+1

@ Sansukk ok, vậy sự khác biệt giữa đường ống logic hoặc đơn là gì? – Roman678

Trả lời

1

Sự khác biệt là các | (ống đơn) là bitwise hoặc và || (ống đôi) là lôgic Hoặc || là toán tử OR logic. Nghe có vẻ như bạn về cơ bản biết đó là gì. Nó được sử dụng trong các câu lệnh có điều kiện như nếu, trong khi, v.v.

condition1 || condition2 

"||" sẽ kiểm tra trình tự bắt đầu từ đầu tiên. Nếu bất kỳ điều kiện nào trong chuỗi được tìm thấy là đúng thì || dừng kiểm tra thêm. hiệu quả hơn trong các câu lệnh có điều kiện

| là toán tử OR bitwise. Nó được sử dụng để hoạt động trên hai con số. Bạn nhìn vào từng bit của mỗi số riêng lẻ và, nếu một trong các bit là 1 trong ít nhất một trong các số, thì bit kết quả cũng sẽ là 1. Dưới đây là một vài ví dụ:

A = 01010101 
B = 10101010 
A | B = 11111111 

A = 00000001 
B = 00010000 
A | B = 00010001 
+2

'^ 1' Tốt, giải thích tốt đẹp. –

+0

@Shanukk Tôi hiểu cách các toán tử bitwise hoạt động, nhưng tôi không hiểu sự khác biệt về các ràng buộc của phiên bản là gì. Hãy xem hai ví dụ _^1.5.0 |^2.0.0_ và **^1.5.0 || 2.0.0 **. _^1.5.0_ chỉ có thể trả về đúng hoặc sai, đúng không? **^2.0.0 ** cũng có thể chỉ trả về đúng hoặc sai, phải không? vì vậy, không có sự khác biệt giữa: _bool | bool_ VÀ ** bool || bool **. phải không? nếu có, sự khác biệt là gì? nếu không, lý do của hai toán tử khác nhau trong composer.phar là gì? – Roman678

+0

Trong ràng buộc phiên bản composer.phar không có sự khác biệt giữa '|' và '||' – Ostin

1

Tôi nghĩ đó là cú pháp cũ của nhà soạn nhạc HOẶC toán tử logic. tôi tìm thấy thông tin này: http://qpleple.com/understand-composer-versions (tìm kiếm các ký tự gạch)

Trong phần giới thiệu nó nói:

Dưới đây là một số trích từ tài liệu Composer của tổ chức lại để hiểu rõ hơn về cách các phiên bản gói và ổn định công trình

nhưng tôi không thể tìm thấy bất kỳ tham chiếu nào trong tài liệu hiện tại của nhà soạn nhạc, sau đó tôi giả định đây là phiên bản cũ của tài liệu

8

Chúng giống nhau.

Nếu bạn nhìn vào lớp VersionParser (https://github.com/composer/semver/blob/1dd67fe56c0587d0d119947061a6bfc9863c101c/src/VersionParser.php#L237) bạn sẽ nhìn thấy đoạn mã sau:

$orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints)); 

Như chúng ta có thể thấy trong regex, họ đang là một? sau khi ống thứ hai, làm cho nó tùy chọn.

Dường như chỉ có ống đôi được ghi lại. (https://getcomposer.org/doc/articles/versions.md#range)

+0

Đường ống đơn không còn được dùng nữa nhưng vẫn giữ lại cho khả năng tương thích ngược. Tham chiếu preg_split của bạn đã được bật. – Scriptonomy

Các vấn đề liên quan