버전 요구 사항에서 물결표 (~>)의 의미는 무엇입니까?


92

~>gem 사양에서 버전 요구 사항 의 의미는 무엇입니까 ?

hanna-0.1.12는 [haml (~> 2.2.8)]에 따라 다릅니다.

27
때때로 정자 연산자라고도합니다.
Andrew Grimm 2011 년

4
또는 twiddle-
wakka

3
+1 @SuckerForMayhem, "twiddle-wakka"가 더 재밌습니다. 새 링크 : guides.rubygems.org/patterns/#pessimistic-version-constraint- 자체적으로 robots.thoughtbot.com/rubys-pessimistic-operator에
Red Pea

2
@SuckerForMayhem Twiddle-wakka는 chupacabra와 같은 전설적인 짐승처럼 들립니다. 이것은 주제에 대한 나의 공헌이었습니다. 당신은 환영받는 사회입니다.
twiz

1
업데이트 된 링크 @TheRedPea 들으
SuckerForMayhem

답변:


93

RubyGems 매뉴얼은 이것을 비관적 버전 제약 이라고 부릅니다 .

제약 조건으로 1.3(2- 파트) 또는 3.5.6.2(4- 파트)와 같은 n- 파트 버전 번호를 지정했다고 가정합니다 . 그런 다음 제약 조건을 충족하기 위해 버전 번호는 다음 조건을 모두 충족해야합니다.

  1. 처음 n-1 버전 번호의 일부는 처음 n-1 제약의 부품과 동일 (예를 들어 있어야합니다 1.x또는 3.5.6.x일치하지만, 0.x또는 3.5.7.x안)

  2. 버전 번호의 마지막 부분은보다 커야 또는 제약의 마지막 부분에 동일 (예를 들어 있어야 1.99993.5.6.2일치하지만, 1.2또는 3.5.6.1하지 않습니다).

다시 말해

~> x 1 .x 2 .x 3 . … .x n-2 .x n-1 .x n

성냥

x 1 .x 2 .x 3 . … .x n-2 .x N-1 .Y, Y> X = N

이것을 "비관적"제약이라고 부르는 이유와 그것의 유스 케이스는 당신이라고 말하면 > x.y.z낙관적이기 때문입니다. 당신은 여기서부터 영원히 API가 변하지 않을 것이라고 가정합니다. 물론 이것은 매우 대담한 가정입니다. 그러나, 대부분의 프로젝트는이 허용되는 경우에 대한 규칙이 이전 버전과의 호환성을 휴식 , 그리고 어떻게 그들이 때 자신의 버전 번호를 변경해야 브레이크 이전 버전과의 호환성을. 비관적 제약 조건을 사용하여 이러한 버전 번호 지정 규칙을 인코딩 할 수 있으므로 코드가 항상 계속 작동하도록 할 수 있습니다 (다른 프로젝트의 작성자가 실제로 자신의 규칙을 준수한다고 가정하면 안타깝게도 항상 그런 것은 아닙니다). ).


32
즉, ~>는 해당 특정 버전과 마지막 10 진수의 최신 하위 버전 만 허용 함을 의미합니다.
Magne 2014

18

즉,이 기호를 사용하여 모든 사소한 업데이트로 gem을 업데이트하고 앱을 손상시킬 수있는 주요 업데이트를 피할 수 있습니다.

예를 들어 "~> 1.2"는 gem을 1.3으로 업데이트하지만 (해당 버전이 출시 된 경우) 2.0으로 업데이트하지는 않습니다.


13

들러 문서는 이것을 가장 잘 요약 한다고 생각 합니다.

지정자 ~>는 특별한 의미를 가지고 있습니다. ~> 2.0.3은> = 2.0.3 및 <2.1과 동일합니다. ~> 2.1은> = 2.1 및 <3.0과 동일합니다. ~> 2.2.beta는 2.2.beta.12와 같은 시험판 버전과 일치합니다.


1
안타깝 네요. 받아 들여진 답변이 이것을 더 자세히 설명하게되어 기쁩니다. 이 예제 기반 설명은 연산자의 의미를 이해하는 데 실제로 도움이되지 않습니다.
tripleee

-1

동일한 주 / 부 부분이있는 모든 버전과 일치합니다. 이것은이 경우 haml ~> 2.2.8이 2.2.x 버전과 일치 함을 의미합니다.

이것은 새로운 gem의 API 브레이킹 체인지가이 경우 hanna를 깨뜨릴 새로운 gem에 의존하지 않는지 확인하는 데 사용할 수 있습니다.


7
이것은 정확하지 않지만 불완전합니다. ~> 2.0과 (과) 의 차이를 이해하는 것이 중요합니다 ~> 2.0.0-이전 경기는 2.0, 2.1, 2.2.7 및 3.0까지 (포함되지는 않음) 다른 모든 것. 후자는 2.0, 2.0.1, 2.0.999 및 2.1까지의 모든 것 (포함되지 않음)과 일치합니다.
James A. Rosen

5
@ 제임스 A. 로젠 : 또한, ~> 2.2.8없는 대답 주장과 같은 "어떤 2.2.x의"버전과 일치하지만, X ≥ 8 IOW 만의 2.2.x 버전 : 대답은 확실히 잘못된와 접경 더욱 완전 최고에있다 오해의 소지가 있습니다.
Jörg W Mittag
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.