在版本要求中代字号的含义大于(〜>)?

在gem规范中,版本要求是什么意思?

 hanna-0.1.12取决于[haml(〜> 2.2.8)]

RubyGems手册称这是一个悲观的版本约束 。

假设您指定了一个n部分的版本号,例如1.3 (2部分)或3.5.6.2 (4部分)作为约束条件。 那么,为了实现这个约束,一个版本号必须同时满足以下两个条件

  1. 版本号的前n-1部分必须与约束的前n-1部分相同(例如1.x3.5.6.x匹配,但是0.x3.5.7.x不匹配)

  2. 版本号的最后一部分必须大于或等于约束的最后部分(例如1.99993.5.6.2匹配,但1.23.5.6.1 3.5.6.2匹配)。

换一种说法

 〜> x_1.x_2.x_3。  ... .x_n-2.x_n-1.x_n

火柴

 x_1.x_2.x_3。  ... .x_n-2.x_n-1.y,y = x_n

这个被称为“悲观”约束的原因,也是它的用例,就是当你说> xyz ,你是乐观的:你从这里开始直到所有的永恒,API永远不会更改。 这当然是一个非常大胆的假设。 但是,大多数项目都有关于何时允许向后兼容的规定 ,以及如何在向后兼容时改变版本号。 您可以使用悲观约束对这些版本编号规则进行编码,因此您可以确定您的代码将始终继续工作(假定其他项目的作者实际上遵守了他自己的规则,但不幸的是并非总是如此)。

换句话说,你可以使用这个符号来保持你的gem更新所有次要的更新,并避免进行重大更新,可以打破你的应用程序。

例如“〜> 1.2”会将你的gem更新为1.3(如果这样的版本被释放),但它不会更新到2.0

我认为打包商文档最好总结一下:

说明符〜>有特殊的含义,最好用例子来表示。 > 2.0.3与> = 2.0.3和<2.1相同。 > 2.1与> = 2.1和<3.0相同。 〜2.2.beta会匹配像2.2.beta.12这样的预发布版本。

它匹配具有相同主要/次要部分的任何版本。 这意味着在这种情况下,haml〜> 2.2.8将匹配任何2.2.x版本。

这可以用来确保一个新的创业板的API突破变化,不会导致取决于新的,但改变了在这种情况下将打破汉娜的创业板。