В чем разница между ~> и >= при указании rubygem в Gemfile?

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

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

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

Ответ 1

Это ограничение пессимистической версии. 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

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

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

Если вы мало знаете о развитии драгоценных камней или просто входите в это, это несколько хороших ссылок: