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


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

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

4 ответа:

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

предположим, что вы указали номер версии 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 никогда не изменится. Этот это, конечно, довольно смелое предположение. Тем не менее, большинство проектов имеют правила о когда им это разрешено нарушить обратную совместимость, и как они должны изменить свой номер версии, когда они сделать перерыв назад совместимость. Вы можете кодировать эти правила нумерации версий с помощью пессимистического ограничение, и поэтому вы можете быть уверены, что ваш код всегда будет продолжать работать (предполагая, что автор другого проекта фактически придерживается своего правила, что, к сожалению, не всегда так).

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

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

Я думаю bundler docs лучше всего подвести итог:

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

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

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