@SuckerForMayhem Twiddle-wakka suena como una especie de bestia legendaria como el chupacabras. Esta ha sido mi contribución al tema. De nada, sociedad.
Suponga que ha especificado un número de versión de n partes, por ejemplo, 1.3(2 partes) o
3.5.6.2(4 partes) como restricción. Luego, para cumplir con la restricción, un número de versión debe satisfacer las dos condiciones siguientes
Las primeras n-1 partes del número de versión deben ser idénticas a las primeras n-1 partes de la restricción (por ejemplo, 1.xo 3.5.6.xcoincidir, pero 0.xo 3.5.7.xno) y
La última parte del número de versión debe ser mayor o igual que la última parte de la restricción (por ejemplo, 1.9999y 3.5.6.2coincide, pero 1.2o 3.5.6.1no).
En otras palabras
~> x 1 .x 2 .x 3 . … .X n-2 .x n-1 .x n
partidos
x 1 .x 2 .x 3 . … .X n-2 .x n-1 .y, y> = x n
La razón por la que esto se llama una restricción "pesimista", y también el caso de uso, es que cuando solo dice > x.y.z, está siendo optimista: asume que de aquí en adelante, hasta la eternidad, la API nunca cambiará. Por supuesto, esta es una suposición bastante audaz. Sin embargo, la mayoría de los proyectos tienen reglas sobre cuándo se les permite
romper la compatibilidad hacia atrás , y cómo tienen que cambiar su número de versión cuando se hacen compatibilidad con versiones anteriores de quiebre. Puede codificar esas reglas de numeración de versiones utilizando una restricción pesimista y, por lo tanto, puede estar seguro de que su código siempre seguirá funcionando (suponiendo que el autor del otro proyecto realmente se adhiera a sus propias reglas, lo que desafortunadamente no siempre es el caso ).
En otras palabras: ~> significa que solo permitirá esa versión específica y sub-versiones más nuevas en el último decimal.
Magne
18
En otras palabras, puede usar este símbolo para mantener su gema actualizada con todas las actualizaciones menores y evitar hacer una actualización importante que pueda romper su aplicación.
Por ejemplo, "~> 1.2" actualizará su gema a 1.3 (si se lanza dicha versión) pero no la actualizará a 2.0
El especificador ~> tiene un significado especial, que se muestra mejor con un ejemplo. ~> 2.0.3 es idéntico a> = 2.0.3 y <2.1. ~> 2.1 es idéntico a> = 2.1 y <3.0. ~> 2.2.beta coincidirá con versiones preliminares como 2.2.beta.12.
Me temo que no. Me alegra que la respuesta aceptada explique esto con más detalle. Esta explicación basada en ejemplos no me ayuda realmente a comprender lo que quiere decir el operador.
tripleee
-1
Coincide con cualquier versión que tenga la misma parte mayor / menor. Esto significa en este caso que haml ~> 2.2.8 coincidirá con cualquier versión 2.2.x.
Esto se puede usar para asegurarse de que un cambio de ruptura de API en una nueva gema no resulte en depender de esa gema recién cambiada que rompería a Hanna en este caso.
Esto no es incorrecto, pero está incompleto. Es importante comprender la diferencia entre ~> 2.0y ~> 2.0.0: el primero coincide con 2.0, 2.1, 2.2.7 y todo lo demás hasta (pero sin incluir) 3.0. Este último coincide con 2.0, 2.0.1, 2.0.999 y todo lo demás hasta (pero sin incluir) 2.1.
James A. Rosen
5
@ James A. Rosen: También, ~> 2.2.8será no relacionar "cualquier 2.2.x" versión como afirma la respuesta, pero sólo 2.2.x versiones con x ≥ 8. OIA: la respuesta es en el mejor de aún más incompleta, cercana a la incorrecta y definitivamente engañoso.
Respuestas:
El manual de RubyGems llama a esto una restricción de versión pesimista .
Suponga que ha especificado un número de versión de n partes, por ejemplo,
1.3
(2 partes) o3.5.6.2
(4 partes) como restricción. Luego, para cumplir con la restricción, un número de versión debe satisfacer las dos condiciones siguientesLas primeras n-1 partes del número de versión deben ser idénticas a las primeras n-1 partes de la restricción (por ejemplo,
1.x
o3.5.6.x
coincidir, pero0.x
o3.5.7.x
no) yLa última parte del número de versión debe ser mayor o igual que la última parte de la restricción (por ejemplo,
1.9999
y3.5.6.2
coincide, pero1.2
o3.5.6.1
no).En otras palabras
partidos
La razón por la que esto se llama una restricción "pesimista", y también el caso de uso, es que cuando solo dice
> x.y.z
, está siendo optimista: asume que de aquí en adelante, hasta la eternidad, la API nunca cambiará. Por supuesto, esta es una suposición bastante audaz. Sin embargo, la mayoría de los proyectos tienen reglas sobre cuándo se les permite romper la compatibilidad hacia atrás , y cómo tienen que cambiar su número de versión cuando se hacen compatibilidad con versiones anteriores de quiebre. Puede codificar esas reglas de numeración de versiones utilizando una restricción pesimista y, por lo tanto, puede estar seguro de que su código siempre seguirá funcionando (suponiendo que el autor del otro proyecto realmente se adhiera a sus propias reglas, lo que desafortunadamente no siempre es el caso ).fuente
En otras palabras, puede usar este símbolo para mantener su gema actualizada con todas las actualizaciones menores y evitar hacer una actualización importante que pueda romper su aplicación.
Por ejemplo, "~> 1.2" actualizará su gema a 1.3 (si se lanza dicha versión) pero no la actualizará a 2.0
fuente
Creo que los documentos del paquete resumen mejor esto:
fuente
Coincide con cualquier versión que tenga la misma parte mayor / menor. Esto significa en este caso que haml ~> 2.2.8 coincidirá con cualquier versión 2.2.x.
Esto se puede usar para asegurarse de que un cambio de ruptura de API en una nueva gema no resulte en depender de esa gema recién cambiada que rompería a Hanna en este caso.
fuente
~> 2.0
y~> 2.0.0
: el primero coincide con 2.0, 2.1, 2.2.7 y todo lo demás hasta (pero sin incluir) 3.0. Este último coincide con 2.0, 2.0.1, 2.0.999 y todo lo demás hasta (pero sin incluir) 2.1.~> 2.2.8
será no relacionar "cualquier 2.2.x" versión como afirma la respuesta, pero sólo 2.2.x versiones con x ≥ 8. OIA: la respuesta es en el mejor de aún más incompleta, cercana a la incorrecta y definitivamente engañoso.