版本要求中tilde-greater-than(〜>)的含义是什么?

Ale*_*xey 87 ruby rubygems

~>宝石规格中版本要求的含义是什么?

hanna-0.1.12 depends on [haml (~> 2.2.8)]

Jör*_*tag 90

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.9999,3.5.6.2匹配,但是1.23.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永远不会改变.这当然是一个非常大胆的假设.然而,大多数项目都有,当他们被允许的规则 打破向后兼容性,以及他们如何改变他们的版本号,当他们这样做打破向后兼容性.您可以使用悲观约束对这些版本编号规则进行编码,因此您可以确保您的代码将始终继续工作(假设其他项目的作者实际上遵守了他自己的规则,但遗憾的是并非总是如此) ).

  • 换句话说:〜>意味着它只允许特定版本,以及最后一个小数的较新子版本. (30认同)

小智 15

换句话说,您可以使用此符号来保持宝石更新所有次要更新,并避免进行可能破坏您的应用程序的重大更新.

例如,"〜> 1.2"会将您的gem更新为1.3(如果发布此类版本),但不会将其更新为2.0


Ari*_*Ari 11

我认为捆绑文件最好总结一下:

说明符〜>具有特殊含义,最好通过示例显示.〜> 2.0.3与> = 2.0.3和<2.1相同.〜> 2.1与> = 2.1和<3.0相同.〜> 2.2.beta将匹配像2.2.beta.12这样的预发布版本.