gemspec语义版本控制运算符〜> (又名twiddle-wakka,又名pessimistic运算符)允许对gem版本进行约束,但允许进行一些升级。
我经常看到它可以被理解为:
"~> 3.1" => "Any version 3.x, but at least 3.1"
"~> 3.1.1" => "Any version 3.1.x, but at least 3.1.1"
但是有了一个数字,这个规则就会破裂:
"~> 3" => "Any version x, but at least 3" *NOT TRUE!*
"~> 3" => "Any version 3.x" *True. But why?*
如果我想要"任何版本3.x",我可以使用"〜> 3.0",这是一致的。就目前而言,这种操作在一个数字上的变化是不一致的,没有记录。
此外,如果我想说"任何高于或等于3&#34的版本; (所以3.x,4.x等......)我很想使用"> ="运营商,我们被告知is evil。
这种行为有原因吗?
编辑:
我将这个给大卫找到rubygems中的罪魁祸首文件。有一个"功能"那无声地扩展" 3"到" 3.0" (Line 148 in version.rb:"单位数版本会自动扩展为零,以产生合理的结果。")
我必须说我不同意结果是明智的,因为它打破了预期的顺序,并且阻止能够说'#34;任何版本x,但至少3"与该运营商。因此,我们被迫进入> =指导.rubygems.org warns us not to use。无论如何。也许这篇文章将作为我一直在寻找的文件......
答案 0 :(得分:6)
通过窥视rubygems源(特别是requirement.rb,version.rb),悲观运算符至少需要两个版本控制段。
它也有意义。因为~> v.r
只是不平等的语法糖
v.r <= current_version.current_release < (v+1).0
如果只有一个版本号,那么上限是多少?是的,∞(无穷大),所以没有必要为什么它应该工作。您只需将其写为>= v
。