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

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

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

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


person Autodidact    schedule 27.11.2010    source источник
comment
См. также: Значение ~> в требованиях к версии.   -  person Jörg W Mittag    schedule 27.11.2010
comment
Можете ли вы указать диапазон версий Ruby в вашем Gemfile? Например. ruby "~>2.0"   -  person Dennis    schedule 16.01.2014
comment
или называется twiddle-wakka   -  person SuckerForMayhem    schedule 04.04.2014
comment
@ Деннис, вот ответ на ваш вопрос: stackoverflow.com/a/23116552/6359753   -  person Henry Yang    schedule 07.06.2018


Ответы (2)


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

person eldarerathis    schedule 27.11.2010
comment
Как это происходит с гемами, которые используют четыре цифры для своей версии, например backbone-on-rails? - person JJD; 14.11.2012
comment
@JJD: это должно быть в основном такое же поведение. Последняя цифра из четырех может увеличиваться без ограничений, а третья — нет (поэтому ~>0.9.2.3 позволяет использовать v0.9.2.4 или v0.9.2.23, но не v0.9.3.0). Если бы вы указали только 3 цифры в ограничении, то четвертая была бы по существу неуместной — она была бы ограничена только на основе первых трех, которые вы указали (например, ~>0.9.2 принял бы что-нибудь в пределах серии 0.9.xy, независимо от того, что такое y; ограничение состоит в том, что 9 не может быть увеличено). - person eldarerathis; 14.11.2012
comment
А как насчет ~›0.1 против ~›0.1.0? Если мы думаем об этом так, как если бы последняя цифра увеличивалась до некоторого произвольного значения, ~›0,1 переводится как ›=0,1,0 ‹1,0,0, а ~›0,1,0 переводится как ›=0,1,0 ‹ 0,2. 0. Это правильно? - person Wei; 15.07.2014
comment
Когда я вижу проект GitHub, в котором говорится, что ему требуется ruby ​​›= 2.4.4, могу ли я предположить, что они поддерживают все ruby ​​после 2.4.4, включая 2.5.1 и даже ruby ​​3? Или мы должны перестраховаться (т. е. вместо того, чтобы думать, что они будут поддерживать все ruby ​​после 2.4.4 включительно, я должен думать, что они имеют в виду, что они не будут поддерживать никакой ruby ​​до 2.4.4)? - person Henry Yang; 07.06.2018
comment
@Wei Вы правы, правильно сказать, что ~›0.1 переводится как ›=0.1.0 ‹1.0.0, а ~›0.1.0 переводится как ›=0.1.0 ‹ 0.2.0. Для справки см. guides.rubygems.org/patterns/#pessimistic-version-constraint и найдите ограничение пессимистической версии. - person Henry Yang; 07.06.2018

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

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

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

  1. Учебное пособие, которое научит вас, как создать собственный RubyGem, стандартные методы, связанные с ним, и как загрузите его, чтобы другие могли его установить.
  2. Как создать Gem с нуля с помощью Bundler
person strangeloops    schedule 19.04.2013
comment
Первая ссылка 404 - person Petr Gazarov; 03.03.2017