Was bedeutet die ~>
Versionsanforderung in Edelsteinspezifikationen?
hanna-0.1.12 hängt ab von [haml (~> 2.2.8)]
Was bedeutet die ~>
Versionsanforderung in Edelsteinspezifikationen?
hanna-0.1.12 hängt ab von [haml (~> 2.2.8)]
Antworten:
Das RubyGems-Handbuch nennt dies eine pessimistische Versionsbeschränkung .
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.x
oder 3.5.6.x
übereinstimmen, aber 0.x
oder 3.5.7.x
nicht) und
Der letzte Teil der Versionsnummer muss größer als oder gleich dem letzten Teil der Einschränkung (zB 1.9999
und 3.5.6.2
Spiel, aber 1.2
oder 3.5.6.1
nicht).
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, 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
Ich denke, Bundler-Dokumente fassen dies am besten zusammen:
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.
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.
~> 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.