Arti tilde-lebih besar dari (~>) dalam persyaratan versi?

94

Apa arti ~>persyaratan versi dalam spesifikasi permata?

hanna-0.1.12 tergantung pada [haml (~> 2.2.8)]
Alexey Chernikov
sumber
27
Terkadang disebut operator spermy.
Andrew Grimm
4
atau twiddle-wakka
SuckerForMayhem
3
+1 @SuckerForMayhem, "twiddle-wakka" lebih lucu. Tautan baru: panduan.rubygems.org/patterns/#pessimistic-version-constraint - yang dengan sendirinya tertaut ke robots.thoughtbot.com/rubys-pessimistic-operator
The Red Pea
2
@SuckerForMayhem Twiddle-wakka terdengar seperti sejenis binatang legendaris seperti chupacabra. Ini telah menjadi kontribusi saya untuk topik tersebut. Terima kasih masyarakat.
twiz
1
thx untuk tautan terbaru @TheRedPea
SuckerForMayhem

Jawaban:

94

Manual RubyGems menyebutnya sebagai batasan versi pesimistis .

Asumsikan Anda telah menentukan nomor versi n-bagian, misalnya 1.3(2-bagian) atau 3.5.6.2(4-bagian) sebagai batasan. Kemudian, untuk memenuhi batasan, nomor versi harus memenuhi kedua kondisi berikut

  1. N-1 bagian pertama dari nomor versi harus identik dengan n-1 bagian pertama dari batasan (misalnya 1.xatau 3.5.6.xcocok, tetapi 0.xatau 3.5.7.xtidak) dan

  2. Bagian terakhir dari nomor versi harus lebih besar dari atau sama dengan bagian terakhir dari batasan (misalnya 1.9999dan 3.5.6.2cocok, tetapi 1.2atau 3.5.6.1tidak).

Dengan kata lain

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

korek api

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

Alasan mengapa hal ini disebut kendala "pesimis", dan juga kasus penggunaannya, adalah karena ketika Anda mengatakan > x.y.z, Anda sedang optimis: Anda berasumsi bahwa mulai saat ini, hingga selama-lamanya, API tidak akan pernah berubah. Ini tentu saja asumsi yang cukup berani. Namun, sebagian besar proyek memiliki aturan tentang kapan mereka diizinkan untuk merusak kompatibilitas mundur , dan bagaimana mereka harus mengubah nomor versinya ketika mereka benar - benar merusak kompatibilitas mundur. Anda dapat mengenkode aturan penomoran versi tersebut menggunakan batasan pesimistis, dan dengan demikian Anda dapat yakin bahwa kode Anda akan selalu berfungsi (dengan asumsi bahwa pembuat proyek lain benar-benar mematuhi aturannya sendiri, yang sayangnya tidak selalu terjadi. ).

Jörg W Mittag
sumber
32
Dengan kata lain: ~> berarti itu hanya akan mengizinkan versi tertentu itu, dan sub-versi yang lebih baru dalam desimal terakhir.
Magne
18

Dengan kata lain, Anda dapat menggunakan simbol ini untuk terus memperbarui permata Anda dengan semua pembaruan kecil dan menghindari membuat pembaruan besar yang dapat merusak aplikasi Anda.

Misalnya "~> 1.2" akan memperbarui permata Anda ke 1.3 (jika versi seperti itu dirilis) tetapi tidak akan memperbaruinya ke 2.0

Redjam
sumber
13

Saya pikir dokumen bundler paling baik merangkumnya:

Penentu ~> memiliki arti khusus, paling baik ditunjukkan dengan contoh. ~> 2.0.3 identik dengan> = 2.0.3 dan <2.1. ~> 2.1 identik dengan> = 2.1 dan <3.0. ~> 2.2.beta akan cocok dengan versi prarilis seperti 2.2.beta.12.

Ari
sumber
1
Saya khawatir saya tidak melakukannya. Saya senang bahwa jawaban yang diterima menjelaskan hal ini secara lebih rinci. Penjelasan berbasis contoh ini tidak terlalu membantu saya memahami apa yang dimaksud dengan operator.
tripleee
-1

Ini cocok dengan versi apa pun yang memiliki bagian mayor / minor yang sama. Ini berarti dalam hal ini haml ~> 2.2.8 akan cocok dengan versi 2.2.x mana pun.

Ini dapat digunakan untuk memastikan bahwa perubahan yang merusak API di permata baru, tidak mengakibatkan bergantung pada permata yang baru tetapi diubah yang akan merusak hanna dalam kasus ini.

Dirkjan Bussink
sumber
7
Ini tidak salah, tapi tidak lengkap. Penting untuk memahami perbedaan antara ~> 2.0dan ~> 2.0.0- pertandingan sebelumnya 2.0, 2.1, 2.2.7, dan yang lainnya hingga (tetapi tidak termasuk) 3.0. Yang terakhir cocok dengan 2.0, 2.0.1, 2.0.999, dan yang lainnya hingga (tetapi tidak termasuk) 2.1.
James A. Rosen
5
@James A. Rosen: Juga, tidak~> 2.2.8 akan cocok dengan versi "2.2.x" seperti yang diklaim jawaban, tetapi hanya versi 2.2.x dengan x ≥ 8. IOW: jawabannya paling-paling bahkan lebih tidak lengkap, berbatasan dengan salah dan pasti menyesatkan.
Jörg W Mittag