2017-02-01 42 views
6

Jaka jest różnica między rurą a rurą podwójną w pliku composer.json? Na przykład:Composer.phar różnica między | i ||

"^1.0.0 || ^2.0.0" 

i

'^1.0.0|^2.0.0' 
+0

Z tego, co znalazłem, są takie same. Może nie mieć jednak racji: – Antony

+0

|| jest traktowany jako logiczny OR –

+1

@Shanukk ok, więc jaka jest różnica między logiczną lub pojedynczą rurą? – Roman678

Odpowiedz

1

Różnica jest taka, że ​​| (pojedyncza rura) to bitowa lub i || (podwójna rura) to logiczna lub || jest logicznym operatorem OR. Wygląda na to, że w zasadzie wiesz, co to jest. Jest używany w instrukcjach warunkowych, takich jak: if, while, itp.

condition1 || condition2 

"||" będzie sprawdzać w kolejności od pierwszego. Jeśli jakikolwiek warunek w sekwencji zostanie uznany za prawdziwy, wówczas || przestaje się dalej sprawdzać.so || jest bardziej wydajny w instrukcjach warunkowych

| jest bitowym operatorem OR. Jest używany do działania na dwóch liczbach. Patrzysz na każdy bit każdej liczby osobno, a jeśli jeden z bitów wynosi 1 w co najmniej jednej z liczb, wynikowy bit będzie równy 1. Oto kilka przykładów:

A = 01010101 
B = 10101010 
A | B = 11111111 

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

'^ 1' Dobrze, miłe wyjaśnienie. –

+0

@Shanukk Rozumiem działanie operatorów bitowych, ale nie rozumiem, jaka jest różnica w ograniczeniach wersji. Spójrz na dwa przykłady: _^1.5.0 |^2.0.0_ i **^1.5.0 || 2.0.0 **. _^1.5.0_ może zwracać tylko wartość true lub false, prawda? **^2.0.0 ** również może zwrócić tylko wartość true lub false, prawda? , więc nie ma różnicy między: _bool | bool_ AND ** bool || bool **. prawo? jeśli tak, jaka jest różnica? jeśli nie, jaki jest powód dwóch różnych operatorów w composer.phar? – Roman678

+0

W ograniczeniach wersji composer.phar nie ma różnicy między '|' a '||' – Ostin

1

Myślę, że jest to stara składnia operatora OR lub operatora logicznego. Znalazłem odniesienie: http://qpleple.com/understand-composer-versions (poszukiwanie znaku rury)

we wstępie mówi:

Oto niektóre wyciągi z dokumentacji kompozytora zreorganizowana do lepiej zrozumieć, jak wersje pakietów i praca stabilność

ale nie mogłem znaleźć żadnego odniesienia w aktualnej dokumentacji kompozytora, wtedy zakładam, że jest to ze starej wersji dokumentacji

8

Są takie same.

Jeśli spojrzeć w klasie VersionParser (https://github.com/composer/semver/blob/1dd67fe56c0587d0d119947061a6bfc9863c101c/src/VersionParser.php#L237) można zobaczyć następujący kod:

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

Jak widzimy w regex, są to? po drugiej rurze, co czyni ją opcjonalną.

Wygląda jednak na to, że tylko podwójna rura jest udokumentowana. (https://getcomposer.org/doc/articles/versions.md#range)

+0

Pojedyncza potok jest przestarzała, ale zachowana dla zgodności wstecznej. Twoje referencje preg_split są na miejscu. – Scriptonomy