Itu adalah batasan versi yang pesimis . RubyGems akan menaikkan digit terakhir dalam versi yang disediakan dan menggunakannya hingga mencapai versi maksimum. Jadi ~>0.8.5secara semantik setara dengan:
gem "cucumber", ">=0.8.5", "<0.9.0"
Cara mudah untuk memikirkannya adalah Anda tidak masalah dengan digit terakhir yang bertambah ke beberapa nilai arbitrer, tetapi digit sebelumnya dalam string tidak boleh lebih besar dari yang Anda berikan. Jadi ~>0.8.5, nilai apa pun dapat diterima untuk digit ketiga (5) asalkan lebih besar dari atau sama dengan 5, tetapi 0,8 di depan harus "0.8".
Anda dapat melakukan ini, misalnya, jika Anda berpikir bahwa versi 0.9 akan menerapkan beberapa perubahan yang mengganggu, tetapi Anda tahu bahwa seluruh seri rilis 0.8.x hanyalah perbaikan bug.
Namun, hanya menggunakan ">=0.8.5"akan menunjukkan bahwa setiap versi dari (atau sama dengan) 0.8.5 dapat diterima. Tidak ada batasan atas.
Bagaimana ini berperilaku dengan permata yang menggunakan empat digit untuk versinya seperti tulang punggung-di-rel ?
JJD
2
@ JJD: Ini pada dasarnya harus perilaku yang sama. Digit terakhir dari empat dapat bertambah tanpa batas, tetapi digit ketiga tidak (sehingga ~>0.9.2.3memungkinkan untuk v0.9.2.4 atau v0.9.2.23 tetapi tidak untuk v0.9.3.0). Jika Anda hanya menentukan 3 digit dalam batasan maka yang keempat pada dasarnya tidak relevan - itu hanya akan dibatasi berdasarkan tiga digit pertama yang Anda tentukan (misalnya ~>0.9.2akan menerima apa pun dalam rangkaian 0,9.xy, terlepas dari apa y; batasannya adalah bahwa angka 9 tidak dapat ditambah).
eldarerathis
3
Ada pengecualian untuk aturan bahwa "RubyGems akan menaikkan digit terakhir dalam versi": ketika Anda memberikan satu digit. Anda mungkin berharap "~> 4" berarti "Semua versi 4 atau lebih tinggi", tetapi ternyata tidak , jadi berhati-hatilah.
hlascelles
2
Bagaimana dengan ~> 0.1 vs. ~> 0.1.0? Jika kita menganggapnya sebagai "Anda baik-baik saja dengan digit terakhir bertambah menjadi beberapa nilai arbitrer", ~> 0.1 diterjemahkan menjadi> = 0.1.0 <1.0.0 sementara ~> 0.1.0 diterjemahkan menjadi> = 0.1.0 < 0.2.0. Apakah itu benar?
Wei
Ketika saya melihat proyek GitHub mengatakan itu membutuhkan ruby> = 2.4.4, dapatkah saya menganggap mereka mendukung semua ruby setelah 2.4.4 termasuk 2.5.1 dan bahkan ruby 3? Atau haruskah kita bermain aman (yaitu, alih-alih berpikir mereka akan mendukung semua ruby setelah 2.4.4 inklusif, saya harus berpikir bahwa mereka berarti mereka tidak akan mendukung ruby sebelum 2.4.4)?
Henry Yang
3
@millisami Anda bahkan dapat menggunakan untuk menambahkan dependensi dengan gemspec menggunakan batasan pesimis seperti ini:
gem.add_runtime_dependency "thor","~> 0.18.1"
Jika Anda tidak tahu banyak tentang pengembangan permata atau baru memahaminya, berikut adalah beberapa referensi yang bagus:
~>
dalam persyaratan versi .~>
kadang-kadang disebut sebagai "operator sperma".ruby "~>2.0"
Jawaban:
Itu adalah batasan versi yang pesimis . RubyGems akan menaikkan digit terakhir dalam versi yang disediakan dan menggunakannya hingga mencapai versi maksimum. Jadi
~>0.8.5
secara semantik setara dengan:gem "cucumber", ">=0.8.5", "<0.9.0"
Cara mudah untuk memikirkannya adalah Anda tidak masalah dengan digit terakhir yang bertambah ke beberapa nilai arbitrer, tetapi digit sebelumnya dalam string tidak boleh lebih besar dari yang Anda berikan. Jadi
~>0.8.5
, nilai apa pun dapat diterima untuk digit ketiga (5) asalkan lebih besar dari atau sama dengan 5, tetapi 0,8 di depan harus "0.8".Anda dapat melakukan ini, misalnya, jika Anda berpikir bahwa versi 0.9 akan menerapkan beberapa perubahan yang mengganggu, tetapi Anda tahu bahwa seluruh seri rilis 0.8.x hanyalah perbaikan bug.
Namun, hanya menggunakan
">=0.8.5"
akan menunjukkan bahwa setiap versi dari (atau sama dengan) 0.8.5 dapat diterima. Tidak ada batasan atas.sumber
~>0.9.2.3
memungkinkan untuk v0.9.2.4 atau v0.9.2.23 tetapi tidak untuk v0.9.3.0). Jika Anda hanya menentukan 3 digit dalam batasan maka yang keempat pada dasarnya tidak relevan - itu hanya akan dibatasi berdasarkan tiga digit pertama yang Anda tentukan (misalnya~>0.9.2
akan menerima apa pun dalam rangkaian 0,9.xy, terlepas dari apay
; batasannya adalah bahwa angka 9 tidak dapat ditambah).@millisami Anda bahkan dapat menggunakan untuk menambahkan dependensi dengan gemspec menggunakan batasan pesimis seperti ini:
Jika Anda tidak tahu banyak tentang pengembangan permata atau baru memahaminya, berikut adalah beberapa referensi yang bagus:
sumber