gem规范中~>
版本要求的含义是什么?
hanna-0.1.12 depends on [haml (~> 2.2.8)]
答案 0 :(得分:86)
RubyGems手册称之为 pessimistic version constraint
假设您已指定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
不匹配。
换句话说
~> x1.x2.x3. … .xn-2.xn-1.xn
匹配
x1.x2.x3. … .xn-2.xn-1.y, y >= xn
这被称为“悲观”约束的原因,也是用例
是的,当你刚才说> x.y.z
时,你是乐观的:你假设
从现在开始,直到永恒,API永远不会改变。这个
当然是一个非常大胆的假设。但是,大多数项目都有规则
当他们被允许时
break backwards compatibility,
以及当他们做向后突破时他们如何更改版本号
兼容性。您可以使用悲观编码对这些版本编号规则进行编码
约束,因此您可以确保您的代码将始终继续工作
(假设另一个项目的作者实际上坚持他自己的
规则,但遗憾的是并非总是如此)。
答案 1 :(得分:13)
换句话说,您可以使用此符号来更新您的宝石所有次要更新,并避免进行可能破坏您的应用程序的重大更新。
例如“〜> 1.2”会将您的gem更新为1.3(如果发布此类版本)但不会将其更新为2.0
答案 2 :(得分:11)
我认为bundler docs最好总结一下:
说明符〜>具有特殊意义,通过实例最佳显示。 〜> 2.0.3与> = 2.0.3相同且< 2.1。 〜> 2.1与> = 2.1并且< 3.0。 〜> 2.2.beta将匹配预发布版本,如2.2.beta.12。
答案 3 :(得分:-1)
它匹配具有相同主要/次要部分的任何版本。这意味着在这种情况下haml~> 2.2.8将匹配任何2.2.x版本。
这可以用来确保新宝石中的API破坏变化,不会导致取决于新的但更改的宝石,在这种情况下会破坏汉娜。