@SuckerForMayhem Twiddle-wakka terdengar seperti sejenis binatang legendaris seperti chupacabra. Ini telah menjadi kontribusi saya untuk topik tersebut. Terima kasih masyarakat.
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
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
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. ).
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
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.
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.
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.
Jawaban:
Manual RubyGems menyebutnya sebagai batasan versi pesimistis .
Asumsikan Anda telah menentukan nomor versi n-bagian, misalnya
1.3
(2-bagian) atau3.5.6.2
(4-bagian) sebagai batasan. Kemudian, untuk memenuhi batasan, nomor versi harus memenuhi kedua kondisi berikutN-1 bagian pertama dari nomor versi harus identik dengan n-1 bagian pertama dari batasan (misalnya
1.x
atau3.5.6.x
cocok, tetapi0.x
atau3.5.7.x
tidak) danBagian terakhir dari nomor versi harus lebih besar dari atau sama dengan bagian terakhir dari batasan (misalnya
1.9999
dan3.5.6.2
cocok, tetapi1.2
atau3.5.6.1
tidak).Dengan kata lain
korek api
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. ).sumber
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
sumber
Saya pikir dokumen bundler paling baik merangkumnya:
sumber
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.
sumber
~> 2.0
dan~> 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.~> 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.