В чем разница между ~> и> = при указании rubygem в Gemfile? - PullRequest
112 голосов
/ 27 ноября 2010

Я часто вижу следующую запись (~>) в Gemfile.

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

Я знаю, что знак (> =) просто больше или равен, но что означает запись (~>)?Они оба одинаковые или имеют существенную разницу?

Ответы [ 2 ]

157 голосов
/ 27 ноября 2010

Это пессимистическое ограничение версии .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, является приемлемой.Верхней границы нет.

2 голосов
/ 19 апреля 2013

@ millisami. Вы даже можете использовать для добавления зависимостей в gemspec, используя пессимистическое ограничение, подобное этому:

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

Если вы не очень много знаете о разработке гемов или только начинаете изучать их, этоВот несколько полезных ссылок:

  1. Учебное пособие, которое научит вас, как создать собственный RubyGem, стандартным методам, связанным с ним, и как загрузить его, чтобы другие могли его установить.
  2. Как создать самоцвет с нуля с помощью Bundler
...