在版本要求中代字号的含义大于(〜>)?
在gem规范中,版本要求是什么意思?
hanna-0.1.12取决于[haml(〜> 2.2.8)]
RubyGems手册称这是一个悲观的版本约束 。
假设您指定了一个n部分的版本号,例如1.3
(2部分)或3.5.6.2
(4部分)作为约束条件。 那么,为了实现这个约束,一个版本号必须同时满足以下两个条件
-
版本号的前n-1部分必须与约束的前n-1部分相同(例如
1.x
或3.5.6.x
匹配,但是0.x
或3.5.7.x
不匹配) 和 -
版本号的最后一部分必须大于或等于约束的最后部分(例如
1.9999
和3.5.6.2
匹配,但1.2
或3.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突破变化,不会导致取决于新的,但改变了在这种情况下将打破汉娜的创业板。