Это ограничение пессимистичной версии . 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. Верхней границы нет.
Как это происходит с драгоценными камнями, которые используют четыре цифры для управления версиями, такими как backbone-on-rails ?
JJD
2
@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 не может быть увеличено).
eldarerathis
3
Однако есть исключение из правила, что «RubyGems будет увеличивать последнюю цифру в версии»: когда вы указываете одну цифру. Вы могли ожидать, что "~> 4" будет означать "Любая версия 4 или выше", но это не так, поэтому будьте осторожны.
hlascelles
2
А как насчет ~> 0,1 против ~> 0,1,0? Если мы подумаем об этом как «вы не против, чтобы последняя цифра увеличивалась до некоторого произвольного значения», ~> 0.1 переводится в> = 0.1.0 <1.0.0, а ~> 0.1.0 переводится в> = 0.1.0 < 0.2.0. Это правильно?
Wei
Когда я вижу проект GitHub, в котором говорится, что он требует ruby> = 2.4.4, могу ли я предположить, что они поддерживают все рубины после 2.4.4, включая 2.5.1 и даже Ruby 3? Или мы должны действовать осторожно (т.е. вместо того, чтобы думать, что они будут поддерживать все рубины после 2.4.4 включительно, я должен думать, что они имеют в виду, что они не будут поддерживать рубин до 2.4.4)?
Генри Ян
3
@millisami Вы даже можете использовать для добавления зависимостей с помощью gemspec, используя пессимистическое ограничение, подобное этому:
gem.add_runtime_dependency "thor","~> 0.18.1"
Если вы мало разбираетесь в разработке драгоценных камней или только начинаете заниматься этим, вот несколько хороших ссылок:
~>
требования к версии .~>
иногда называют «оператором спермы».ruby "~>2.0"
Ответы:
Это ограничение пессимистичной версии . 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. Верхней границы нет.источник
~>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 не может быть увеличено).@millisami Вы даже можете использовать для добавления зависимостей с помощью gemspec, используя пессимистическое ограничение, подобное этому:
Если вы мало разбираетесь в разработке драгоценных камней или только начинаете заниматься этим, вот несколько хороших ссылок:
источник