我经常在 Gemfile 中看到以下符号(~>)。
gem "cucumber", "~>0.8.5"
gem "rspec", "~>1.3.0"
我知道符号 (>=) 只是大于或等于,但是 (~>) 符号是什么意思?它们是否相同或有任何显着差异?
这是一个悲观的版本约束。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 的版本都是可以接受的。没有上限。
@millisami您甚至可以使用这样的悲观约束来使用gemspec添加依赖项:
gem.add_runtime_dependency "thor", "~> 0.18.1"
如果您对 gem 开发知之甚少或刚刚涉足它,这些是一些很好的参考资料: