Что означает ~>
Требуется ли версия в спецификации gem?
hanna-0.1.12 depends on [haml (~> 2.2.8)]
В руководстве 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
- нет)).
Другими словами
~> x1.x2.x3. … .xn-2.xn-1.xn
соответствует
x1.x2.x3. … .xn-2.xn-1.y, y >= xn
Причина, по которой это называется «пессимистическим» ограничением, а также вариант использования для
это то, что когда вы просто говорите > x.y.z
, вы проявляете оптимизм: вы предполагаете
что с этого момента и до вечности API никогда не изменится. Этот
конечно, довольно смелое предположение. Однако в большинстве проектов есть правила относительно
когда им разрешено
нарушить обратную совместимость ,
и как они должны изменить свой номер версии, когда они делают обратный
совместимость.Вы можете закодировать эти правила нумерации версий, используя пессимистичный
ограничение, и поэтому вы можете быть уверены, что ваш код всегда будет продолжать работать
(при условии, что автор другого проекта действительно придерживается своего
rules, что, к сожалению, не всегда).
Соответствует любой версии с такой же основной / второстепенной частью. В данном случае это означает, что haml ~> 2.2.8 будет соответствовать любой версии 2.2.x.
Это можно использовать, чтобы убедиться, что критическое изменение API в новом геме не приводит к зависимости от этого нового, но измененного драгоценного камня, который в данном случае сломал бы ханну.