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

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

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



답변

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가 변하지 않을 것이라고 가정합니다. 물론 이것은 매우 대담한 가정입니다. 그러나, 대부분의 프로젝트는이 허용되는 경우에 대한 규칙이
이전 버전과의 호환성을 휴식 , 그리고 어떻게 그들이 때 자신의 버전 번호를 변경해야 브레이크 이전 버전과의 호환성을. 비관적 제약 조건을 사용하여 이러한 버전 번호 지정 규칙을 인코딩 할 수 있으므로 코드가 항상 계속 작동하도록 할 수 있습니다 (다른 프로젝트의 작성자가 실제로 자신의 규칙을 준수한다고 가정하면 안타깝게도 항상 그런 것은 아닙니다). ).


답변

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

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


답변

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

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


답변

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

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


답변