Tilde-büyük-than (~>) sürüm gereksinimindeki anlamı nedir?


95

~>Gem özelliklerinde sürüm gereksiniminin anlamı nedir ?

hanna-0.1.12, [haml (~> 2.2.8)] değerine bağlıdır

27
Bazen spermi operatörü olarak adlandırılır.
Andrew Grimm

4
or
twiddle

3
+1 @SuckerForMayhem, "twiddle-wakka" daha eğlenceli. Yeni bağlantı: guides.rubygems.org/patterns/#pessimistic-version-constraint - kendisi robots.thoughtbot.com/rubys-pessimistic-operator ile
The Red Pea

2
@SuckerForMayhem Twiddle-wakka, chupacabra gibi bir tür efsanevi canavar gibi geliyor. Bu konuya katkım oldu. Hoşgeldin toplum.
2019

1
güncellenmiş bağlantılar için teşekkürler @TheRedPea
SuckerForMayhem

Yanıtlar:


96

RubyGems kılavuzu buna bir kötümser bir sürüm kısıtlaması olarak adlandırır .

N parçalı bir sürüm numarası belirttiğinizi varsayın, örneğin 1.3(2 parçalı) veya 3.5.6.2 (4 parçalı) kısıtlama olarak. Ardından, kısıtlamayı yerine getirmek için bir sürüm numarası aşağıdaki koşulların her ikisini de karşılamalıdır

  1. Sürüm numarasının ilk n-1 bölümü, kısıtlamanın ilk n-1 bölümüyle aynı olmalıdır (ör. 1.xVeya 3.5.6.xeşleşiyor, ancak 0.xveya 3.5.7.xyok) ve

  2. Sürüm numarasının son kısmı, kısıtlamanın son kısmına eşit veya ondan büyük olmalıdır (ör. 1.9999Ve 3.5.6.2eşleşiyor, ama 1.2veya3.5.6.1 da değil).

Başka bir deyişle

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

maçlar

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

Buna "kötümser" kısıtlama denmesinin ve aynı zamanda kullanım durumunun sebebi, sadece söylediğinizde > x.y.ziyimser olmanızdır: buradan sonra, sonsuza kadar API'nin asla değişmeyeceğini varsayarsınız. Bu elbette oldukça cesur bir varsayımdır. Ancak, çoğu projelerin onlar izin verildiğinde ilgili kurallara sahip geriye doğru uyumluluk kırmak ve nasıl onlar ne zaman kendi sürüm numarasını değiştirmek zorunda yapmak mola geriye uyumluluk. Bu sürüm numaralandırma kurallarını kötümser bir kısıtlama kullanarak kodlayabilirsiniz ve böylece kodunuzun her zaman çalışmaya devam edeceğinden emin olabilirsiniz (diğer projenin yazarının aslında kendi kurallarına bağlı olduğunu varsayarsak, ne yazık ki durum her zaman böyle değildir) ).


34
Başka bir deyişle: ~>, yalnızca belirli sürüme ve son ondalık sayıdaki daha yeni alt sürümlere izin vereceği anlamına gelir.
Magne

18

Başka bir deyişle, cevherinizi tüm küçük güncellemelerle güncel tutmak ve uygulamanızı bozabilecek büyük bir güncelleme yapmaktan kaçınmak için bu sembolü kullanabilirsiniz.

Örneğin "~> 1.2" geminizi 1.3'e güncelleyecektir (eğer böyle bir sürüm yayınlanmışsa) ancak 2.0'a güncellemeyecektir.


13

Bence paket dokümanları bunu en iyi şekilde özetliyor:

~> Belirtecinin en iyi örnekle gösterilen özel bir anlamı vardır. ~> 2.0.3,> = 2.0.3 ve <2.1 ile aynıdır. ~> 2.1,> = 2.1 ve <3.0 ile aynıdır. ~> 2.2.beta, 2.2.beta.12 gibi yayın öncesi sürümlerle eşleşecektir.


1
Korkarım yapmıyorum. Kabul edilen cevabın bunu daha ayrıntılı olarak açıklamasına sevindim. Bu örnek tabanlı açıklama, operatörün ne anlama geldiğini anlamama gerçekten yardımcı olmuyor.
üçlü

-1

Aynı büyük / küçük kısma sahip herhangi bir sürümle eşleşir. Bu, bu durumda haml ~> 2.2.8'in herhangi bir 2.2.x sürümüyle eşleşeceği anlamına gelir.

Bu, yeni bir cevherde bir API kırma değişikliğinin, bu durumda hanna'yı bozacak yeni ancak değiştirilmiş cevhere bağlı olarak sonuçlanmamasını sağlamak için kullanılabilir.


7
Bu yanlış değil ama eksik. Arasındaki farkı undersatnd önemlidir ~> 2.0ve ~> 2.0.0eski maçlar 2.0, 2.1, en fazla başka 2.2.7, ve her şey (ama hariç) 3,0 -. Sonuncusu 2.0, 2.0.1, 2.0.999 ve 2.1'e kadarki (ancak dahil olmayan) her şeyle eşleşir.
James A. Rosen

5
@James A. Rosen: Ayrıca, ~> 2.2.8olacak değil cevap iddia ettiği gibi "herhangi 2.2.x" sürümü eşleşir ancak x ≥ 8. IOW sadece 2.2.x sürümleri: cevabı kesinlikle yanlış ve sınırındaki, hatta daha tamamlanmamış iyi olan yanıltıcı.
Jörg W Mittag
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.