Значение тильда-больше-чем (~>) в требовании к версии? - PullRequest
83 голосов
/ 05 августа 2010

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

hanna-0.1.12 depends on [haml (~> 2.2.8)]

Ответы [ 4 ]

86 голосов
/ 05 августа 2010

Руководство 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<sub>1</sub>.x<sub>2</sub>.x<sub>3</sub>. &hellip; .x<sub>n-2</sub>.x<sub>n-1</sub>.x<sub>n</sub>

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

x<sub>1</sub>.x<sub>2</sub>.x<sub>3</sub>. &hellip; .x<sub>n-2</sub>.x<sub>n-1</sub>.y, y >= x<sub>n</sub>

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

13 голосов
/ 27 января 2014

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

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

11 голосов
/ 23 мая 2015

Я думаю, документы для комплектации Лучшая сумма:

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

0 голосов
/ 05 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...