130

我经常在 Gemfile 中看到以下符号(~>)。

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

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

4

2 回答 2

175

这是一个悲观的版本约束。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 的版本都是可以接受的。没有上限。

于 2010-11-27T17:33:31.963 回答
3

@millisami您甚至可以使用这样的悲观约束来使用gemspec添加依赖项:

gem.add_runtime_dependency "thor", "~> 0.18.1"

如果您对 gem 开发知之甚少或刚刚涉足它,这些是一些很好的参考资料:

  1. 教程,教您如何制作自己的 RubyGem、与之相关的标准实践,以及如何上传它以便其他人可以安装它。
  2. 如何使用 Bundler 从头开始​​创建 Gem
于 2013-04-19T16:23:49.350 回答