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

时间:2010-11-27 17:26:45

标签: ruby rubygems gemfile

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

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

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

2 个答案:

答案 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"

如果您对宝石开发知之甚少或刚刚进入宝石,这些都是很好的参考:

  1. Tutorial that teaches you how to make your own RubyGem, the standard practices associated with it, and how to upload it so that others can install it.
  2. How to create a Gem from scratch with Bundler