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

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

hanna-0.1.12 depends on [haml (~> 2.2.8)]
86
задан Steven Penny 8 February 2014 в 21:40
поделиться

2 ответа

В руководстве 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 - нет)).

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

~> x1.x2.x3. … .xn-2.xn-1.xn

соответствует

x1.x2.x3. … .xn-2.xn-1.y, y >= xn

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

89
ответ дан 24 November 2019 в 08:06
поделиться

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

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

-1
ответ дан 24 November 2019 в 08:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: