Що означає ~>
вимога до версії в специфікаціях gem?
hanna-0,1.12 залежить від [haml (~> 2.2.8)]
Що означає ~>
вимога до версії в специфікаціях gem?
hanna-0,1.12 залежить від [haml (~> 2.2.8)]
Відповіді:
Посібник RubyGems називає це песимістичним обмеженням версії .
Припустимо, що ви вказали номер версії n-частини, наприклад 1.3
(2-частина) або
3.5.6.2
(4-частина) як обмеження. Тоді, щоб виконати обмеження, номер версії повинен задовольняти обом наведеним нижче умовам
Перші частини n-1 номера версії повинні бути ідентичними першим частинам n-1 обмеження (наприклад, 1.x
або 3.5.6.x
збігатися, але 0.x
чи 3.5.7.x
ні), і
Остання частина номера версії повинна бути більшою або дорівнює останній частині обмеження (наприклад, 1.9999
і 3.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 ніколи не зміниться. Звичайно, це досить сміливе припущення. Тим НЕ менше, більшість проектів мають правила про те, коли вони можуть
порушити зворотну сумісність , і як вони повинні змінити свій номер версії , коли вони роблять сумісності перерву в зворотному напрямку. Ви можете кодувати ці правила нумерації версій, використовуючи песимістичне обмеження, і, таким чином, ви можете бути впевнені, що ваш код буде продовжувати працювати (припускаючи, що автор іншого проекту насправді дотримується своїх власних правил, що, на жаль, не завжди має місце) ).
Іншими словами, ви можете використовувати цей символ, щоб постійно оновлювати ваш дорогоцінний камінь усіма незначними оновленнями та уникати серйозного оновлення, яке може зламати ваш додаток.
Наприклад, "~> 1.2" оновить ваш камінь до 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.
Це може бути використано для того, щоб переконатися, що API, що порушує зміну нового дорогоцінного каміння, не призводить до того, що це залежить від того нового, але зміненого дорогоцінного каменя, який у цьому випадку зламав би хану.
~> 2.0
і ~> 2.0.0
- попередні збіги 2.0, 2.1, 2.2.7, а все інше до (але не враховуючи) 3.0. Останній відповідає 2.0, 2.0.1, 2.0.999, а все інше до (але не включаючи) 2.1.
~> 2.2.8
буде НЕ відповідати «будь-2.2.x» варіант в якості претензій відповіді, але тільки 2.2.x версії з х ≥ 8. IOW: відповідь в кращому випадку ще більш неповним, що межує з неправильним і , безумовно , вводить в оману.