在Gemfile中指定rubygem时,〜>和> =有什么区别?

我经常在Gemfile中看到下面的符号(〜>)。

gem "cucumber", "~>0.8.5" gem "rspec", "~>1.3.0" 

我知道符号(> =)大于或等于,但(〜>)符号是什么意思? 它们是相同还是有显着差异?

这是一个悲观的版本约束 。 RubyGems会增加所提供的版本中的最后一个数字,并使用它,直到达到最大版本。 所以~>0.8.5在语义上等价于:

gem "cucumber", ">=0.8.5", "<0.9.0"

简单的想法是,你可以用最后一个数字递增到某个任意值,但是在string前面的数字不能大于你提供的值。 因此,对于~>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开发了解不多,或者刚刚进入gem开发领域,这些都是一些很好的参考:

  1. 教程,教你如何制作自己的RubyGem,与之相关的标准实践,以及如何上传,以便其他人可以安装它。
  2. 如何用Bundler从头开始创build一个Gem