Значение тильда-больше-чем (~>) в требовании к версии?

Что значит ~> Требование версии в спецификации gem?

Ханна-0.1.12 зависит от [хамл (~> 2.2.8)]

4 ответа

Решение

Руководство RubyGems называет это пессимистическим ограничением версии.

Предположим, вы указали номер версии из n частей, например 1.3 (2 части) или 3.5.6.2 (4 части) в качестве ограничения. Затем, чтобы выполнить ограничение, номер версии должен удовлетворять обоим из следующих условий

  1. Первые n-1 части номера версии должны быть идентичны первым n-1 частям ограничения (например, 1.x или же 3.5.6.x соответствовать, но 0.x или же 3.5.7.x нет) и

  2. Последняя часть номера версии должна быть больше или равна последней части ограничения (например, 1.9999 а также 3.5.6.2 соответствовать, но 1.2 или же 3.5.6.1 нет).

Другими словами

~> x 1.x 2.x 3. ….X n-2.x n-1.x n

Матчи

х 123. ….X n-2.x n-1.y, y> = x n

Причина, по которой это называется "пессимистическим" ограничением, а также сценарий его использования, заключается в том, что когда вы просто говорите > x.y.zвы настроены оптимистично: вы предполагаете, что с этого момента и до бесконечности API никогда не изменится. Это, конечно, довольно смелое предположение. Однако в большинстве проектов есть правила о том, когда им разрешается нарушать обратную совместимость, и как им приходится менять номер версии, когда они нарушают обратную совместимость. Вы можете кодировать эти правила нумерации версий, используя пессимистические ограничения, и, таким образом, вы можете быть уверены, что ваш код всегда будет работать (при условии, что автор другого проекта действительно придерживается своих собственных правил, что, к сожалению, не всегда так).).

Другими словами, вы можете использовать этот символ для обновления вашего драгоценного камня со всеми незначительными обновлениями и избегать значительных обновлений, которые могут сломать ваше приложение.

Например, "~> 1.2" обновит ваш гем до 1.3 (если выпущена такая версия), но не обновит его до 2.0

Я думаю, лучше всего подытожить:

Спецификатор ~> имеет особое значение, лучше всего показанное на примере. ~> 2.0.3 идентичен>= 2.0.3 и < 2.1. ~> 2.1 идентичен>= 2.1 и < 3.0. ~> 2.2.beta будет соответствовать предварительным версиям, таким как 2.2.beta.12.

Это соответствует любой версии, которая имеет ту же основную / второстепенную часть. В этом случае это означает, что haml ~> 2.2.8 будет соответствовать любой версии 2.2.x.

Это можно использовать, чтобы убедиться, что изменение API в новом драгоценном камне не приводит к зависимости от этого нового, но измененного драгоценного камня, который в этом случае нарушит Ханну.

Другие вопросы по тегам