我经常在Gemfile中看到以下符号(〜>)。
gem "cucumber", "~>0.8.5"
gem "rspec", "~>1.3.0"
我知道符号(> =)只是大于或等于,但(〜>)符号是什么意思? 它们是相同的还是有任何显着差异?
答案 0 :(得分:157)
那是pessimistic version constraint。 RubyGems将递增所提供版本中的最后一位数字并使用它直到达到最大版本。所以~>0.8.5
在语义上等同于:
gem "cucumber", ">=0.8.5", "<0.9.0"
考虑它的简单方法是你可以将最后一个数字递增到某个任意值,但是字符串前面的数字不能大于你提供的数字。因此,对于~>0.8.5
,任何值对于第三个数字(5)都是可接受的,只要它大于或等于5,但是前导0.8必须是“0.8”。
你可能会这样做,例如,如果您认为0.9版本将实现一些重大更改,但您知道整个0.8.x版本系列只是错误修正。
但是,仅使用">=0.8.5"
表示任何版本晚于(或等于)0.8.5是可以接受的。没有上限。
答案 1 :(得分:2)
@millisami您甚至可以使用像这样的悲观约束来使用gemspec添加依赖项:
gem.add_runtime_dependency "thor", "~> 0.18.1"
如果您对宝石开发知之甚少或刚刚进入宝石,这些都是很好的参考: