Angenommen, Sie haben eine n-teilige Versionsnummer angegeben, z. B. 1.3(2-teilig) oder
3.5.6.2(4-teilig) als Einschränkung. Um die Einschränkung zu erfüllen, muss eine Versionsnummer beide der folgenden Bedingungen erfüllen
Die ersten n-1 Teile der Versionsnummer müssen mit den ersten n-1 Teilen der Einschränkung identisch sein (z. B. 1.xoder 3.5.6.xübereinstimmen, aber 0.xoder 3.5.7.xnicht) und
Der letzte Teil der Versionsnummer muss größer als oder gleich dem letzten Teil der Einschränkung (zB 1.9999und 3.5.6.2Spiel, aber 1.2oder 3.5.6.1nicht).
Mit anderen Worten
~> x 1 .x 2 .x 3 . … .X n-2 .x n-1 .x n
Streichhölzer
x 1 .x 2 .x 3 . … .X n-2 .x n-1 .y, y> = x n
Der Grund, warum dies als "pessimistische" Einschränkung bezeichnet wird, und auch der Anwendungsfall dafür, ist, dass Sie, wenn Sie nur sagen > x.y.z, optimistisch sind: Sie gehen davon aus, dass sich die API von nun an bis in alle Ewigkeit niemals ändern wird. Dies ist natürlich eine ziemlich kühne Annahme. Die meisten Projekte haben jedoch Regeln darüber, wann sie die
Abwärtskompatibilität aufheben dürfen und wie sie ihre Versionsnummer ändern müssen, wenn sie die Abwärtskompatibilität aufheben. Sie können diese Versionsnummerierungsregeln mit einer pessimistischen Einschränkung codieren und so sicher sein, dass Ihr Code immer weiter funktioniert (vorausgesetzt, der Autor des anderen Projekts hält sich tatsächlich an seine eigenen Regeln, was leider nicht immer der Fall ist ).
Mit anderen Worten: ~> bedeutet, dass nur diese bestimmte Version und neuere Unterversionen in der letzten Dezimalstelle zugelassen werden.
Magne
18
Mit anderen Worten, Sie können dieses Symbol verwenden, um Ihren Edelstein mit allen kleineren Updates auf dem neuesten Stand zu halten und zu vermeiden, dass größere Updates durchgeführt werden, die Ihre App beschädigen können.
Zum Beispiel wird "~> 1.2" Ihren Edelstein auf 1.3 aktualisieren (wenn eine solche Version veröffentlicht wird), aber nicht auf 2.0
Der Bezeichner ~> hat eine besondere Bedeutung, die am besten am Beispiel gezeigt wird. ~> 2.0.3 ist identisch mit> = 2.0.3 und <2.1. ~> 2.1 ist identisch mit> = 2.1 und <3.0. ~> 2.2.beta stimmt mit Vorabversionen wie 2.2.beta.12 überein.
Ich fürchte, ich nicht. Ich bin froh, dass die akzeptierte Antwort dies ausführlicher erklärt. Diese beispielhafte Erklärung hilft mir nicht wirklich zu verstehen, was der Operator bedeutet.
Tripleee
-1
Es passt zu jeder Version, die den gleichen Haupt- / Nebenanteil hat. Dies bedeutet in diesem Fall, dass haml ~> 2.2.8 mit jeder 2.2.x-Version übereinstimmt.
Dies kann verwendet werden, um sicherzustellen, dass eine API, die die Änderung in einem neuen Edelstein bricht, nicht dazu führt, dass sie von diesem neuen, sondern geänderten Edelstein abhängt, der in diesem Fall hanna brechen würde.
Dies ist nicht falsch, aber unvollständig. Es ist wichtig, den Unterschied zwischen ~> 2.0und ~> 2.0.0- den früheren Übereinstimmungen 2.0, 2.1, 2.2.7 und allem anderen bis zu (aber nicht einschließlich) 3.0 zu unterschätzen. Letzteres entspricht 2.0, 2.0.1, 2.0.999 und allem anderen bis 2.1.
James A. Rosen
5
@ James A. Rosen: Wird ~> 2.2.8auch nicht mit "irgendeiner 2.2.x" -Version übereinstimmen, wie die Antwort behauptet, sondern nur mit 2.2.x-Versionen mit x ≥ 8. IOW: Die Antwort ist bestenfalls noch unvollständiger und grenzt an falsch und definitiv irreführend.
Antworten:
Das RubyGems-Handbuch nennt dies eine pessimistische Versionsbeschränkung .
Angenommen, Sie haben eine n-teilige Versionsnummer angegeben, z. B.
1.3
(2-teilig) oder3.5.6.2
(4-teilig) als Einschränkung. Um die Einschränkung zu erfüllen, muss eine Versionsnummer beide der folgenden Bedingungen erfüllenDie ersten n-1 Teile der Versionsnummer müssen mit den ersten n-1 Teilen der Einschränkung identisch sein (z. B.
1.x
oder3.5.6.x
übereinstimmen, aber0.x
oder3.5.7.x
nicht) undDer letzte Teil der Versionsnummer muss größer als oder gleich dem letzten Teil der Einschränkung (zB
1.9999
und3.5.6.2
Spiel, aber1.2
oder3.5.6.1
nicht).Mit anderen Worten
Streichhölzer
Der Grund, warum dies als "pessimistische" Einschränkung bezeichnet wird, und auch der Anwendungsfall dafür, ist, dass Sie, wenn Sie nur sagen
> x.y.z
, optimistisch sind: Sie gehen davon aus, dass sich die API von nun an bis in alle Ewigkeit niemals ändern wird. Dies ist natürlich eine ziemlich kühne Annahme. Die meisten Projekte haben jedoch Regeln darüber, wann sie die Abwärtskompatibilität aufheben dürfen und wie sie ihre Versionsnummer ändern müssen, wenn sie die Abwärtskompatibilität aufheben. Sie können diese Versionsnummerierungsregeln mit einer pessimistischen Einschränkung codieren und so sicher sein, dass Ihr Code immer weiter funktioniert (vorausgesetzt, der Autor des anderen Projekts hält sich tatsächlich an seine eigenen Regeln, was leider nicht immer der Fall ist ).quelle
Mit anderen Worten, Sie können dieses Symbol verwenden, um Ihren Edelstein mit allen kleineren Updates auf dem neuesten Stand zu halten und zu vermeiden, dass größere Updates durchgeführt werden, die Ihre App beschädigen können.
Zum Beispiel wird "~> 1.2" Ihren Edelstein auf 1.3 aktualisieren (wenn eine solche Version veröffentlicht wird), aber nicht auf 2.0
quelle
Ich denke, Bundler-Dokumente fassen dies am besten zusammen:
quelle
Es passt zu jeder Version, die den gleichen Haupt- / Nebenanteil hat. Dies bedeutet in diesem Fall, dass haml ~> 2.2.8 mit jeder 2.2.x-Version übereinstimmt.
Dies kann verwendet werden, um sicherzustellen, dass eine API, die die Änderung in einem neuen Edelstein bricht, nicht dazu führt, dass sie von diesem neuen, sondern geänderten Edelstein abhängt, der in diesem Fall hanna brechen würde.
quelle
~> 2.0
und~> 2.0.0
- den früheren Übereinstimmungen 2.0, 2.1, 2.2.7 und allem anderen bis zu (aber nicht einschließlich) 3.0 zu unterschätzen. Letzteres entspricht 2.0, 2.0.1, 2.0.999 und allem anderen bis 2.1.~> 2.2.8
auch nicht mit "irgendeiner 2.2.x" -Version übereinstimmen, wie die Antwort behauptet, sondern nur mit 2.2.x-Versionen mit x ≥ 8. IOW: Die Antwort ist bestenfalls noch unvollständiger und grenzt an falsch und definitiv irreführend.