Предположим, вы указали n-частный номер версии, например 1.3(2-частный) или
3.5.6.2(4-частный) в качестве ограничения. Затем, чтобы выполнить ограничение, номер версии должен удовлетворять обоим из следующих условий
Первые n-1 части номера версии должны быть идентичны первым n-1 частям ограничения (например, 1.xили 3.5.6.xсовпадать, но 0.xили 3.5.7.xнет) и
Последняя часть номера версии должна быть больше или равна последней части ограничения (например, 1.9999и 3.5.6.2совпадать, но 1.2или 3.5.6.1нет).
Другими словами
~> х 1. х 2. х 3 . … .X n-2 .x n-1 .x n
совпадения
х 1. х 2. х 3 . … .X n-2 .x n-1 .y, y> = x n
Причина, по которой это называется «пессимистическим» ограничением, а также вариант его использования, заключается в том, что, когда вы просто говорите > x.y.z, вы проявляете оптимизм: вы предполагаете, что с этого момента, вплоть до вечности, API никогда не изменится. Это, конечно, довольно смелое предположение. Однако в большинстве проектов есть правила о том, когда им разрешено
нарушать обратную совместимость и как они должны изменять номер своей версии, когда они действительно нарушают обратную совместимость. Вы можете закодировать эти правила нумерации версий, используя пессимистическое ограничение, и, таким образом, вы можете быть уверены, что ваш код всегда будет продолжать работать (при условии, что автор другого проекта действительно придерживается своих собственных правил, что, к сожалению, не всегда так. ).
Другими словами: ~> означает, что это разрешит только эту конкретную версию и более новые подверсии в последнем десятичном значении.
Magne
18
Другими словами, вы можете использовать этот символ, чтобы обновлять свой гем со всеми незначительными обновлениями и избегать крупных обновлений, которые могут нарушить работу вашего приложения.
Например, "~> 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.
Боюсь, что нет. Я рад, что принятый ответ объясняет это более подробно. Это объяснение на основе примеров на самом деле не помогает мне понять, что означает оператор.
Tripleee
-1
Он соответствует любой версии, имеющей такую же основную / вспомогательную часть. В данном случае это означает, что haml ~> 2.2.8 будет соответствовать любой версии 2.2.x.
Это можно использовать, чтобы убедиться, что изменение API-интерфейса в новом геме не приведет к зависимости от этого нового, но измененного драгоценного камня, который в этом случае сломал бы ханну.
Это не неверно, но неполно. Важно недооценивать разницу между ~> 2.0и ~> 2.0.0- первое соответствует 2.0, 2.1, 2.2.7 и всем остальным до (но не включая) 3.0. Последний соответствует 2.0, 2.0.1, 2.0.999 и всем остальным до (но не включая) 2.1.
Джеймс А. Розен
5
@ Джеймс А. Розен: Кроме того, не~> 2.2.8 будет соответствовать "любая версия 2.2.x", как утверждается в ответе, а только версии 2.2.x с x ≥ 8. IOW: ответ в лучшем случае еще более неполный, граничащий с неправильным и определенно вводящие в заблуждение.
Ответы:
В руководстве RubyGems это называется пессимистическим ограничением версии .
Предположим, вы указали n-частный номер версии, например
1.3
(2-частный) или3.5.6.2
(4-частный) в качестве ограничения. Затем, чтобы выполнить ограничение, номер версии должен удовлетворять обоим из следующих условийПервые n-1 части номера версии должны быть идентичны первым n-1 частям ограничения (например,
1.x
или3.5.6.x
совпадать, но0.x
или3.5.7.x
нет) иПоследняя часть номера версии должна быть больше или равна последней части ограничения (например,
1.9999
и3.5.6.2
совпадать, но1.2
или3.5.6.1
нет).Другими словами
совпадения
Причина, по которой это называется «пессимистическим» ограничением, а также вариант его использования, заключается в том, что, когда вы просто говорите
> x.y.z
, вы проявляете оптимизм: вы предполагаете, что с этого момента, вплоть до вечности, API никогда не изменится. Это, конечно, довольно смелое предположение. Однако в большинстве проектов есть правила о том, когда им разрешено нарушать обратную совместимость и как они должны изменять номер своей версии, когда они действительно нарушают обратную совместимость. Вы можете закодировать эти правила нумерации версий, используя пессимистическое ограничение, и, таким образом, вы можете быть уверены, что ваш код всегда будет продолжать работать (при условии, что автор другого проекта действительно придерживается своих собственных правил, что, к сожалению, не всегда так. ).источник
Другими словами, вы можете использовать этот символ, чтобы обновлять свой гем со всеми незначительными обновлениями и избегать крупных обновлений, которые могут нарушить работу вашего приложения.
Например, "~> 1.2" обновит ваш гем до 1.3 (если такая версия выпущена), но не до 2.0.
источник
Я думаю, что документация по сборке лучше всего резюмирует это:
источник
Он соответствует любой версии, имеющей такую же основную / вспомогательную часть. В данном случае это означает, что haml ~> 2.2.8 будет соответствовать любой версии 2.2.x.
Это можно использовать, чтобы убедиться, что изменение API-интерфейса в новом геме не приведет к зависимости от этого нового, но измененного драгоценного камня, который в этом случае сломал бы ханну.
источник
~> 2.0
и~> 2.0.0
- первое соответствует 2.0, 2.1, 2.2.7 и всем остальным до (но не включая) 3.0. Последний соответствует 2.0, 2.0.1, 2.0.999 и всем остальным до (но не включая) 2.1.~> 2.2.8
будет соответствовать "любая версия 2.2.x", как утверждается в ответе, а только версии 2.2.x с x ≥ 8. IOW: ответ в лучшем случае еще более неполный, граничащий с неправильным и определенно вводящие в заблуждение.