Семантический оператор управления версиями gemspec ~> (также известный как twiddle-wakka, также известный как пессимистический оператор) позволяет ограничить версию gem, но разрешить некоторые обновления.
Я часто видел, что это можно прочитать как:
"~> 3.1" => "Any version 3.x, but at least 3.1"
"~> 3.1.1" => "Any version 3.1.x, but at least 3.1.1"
Но с одним номером это правило нарушается:
"~> 3" => "Any version x, but at least 3" *NOT TRUE!*
"~> 3" => "Any version 3.x" *True. But why?*
Если бы я хотел «Любая версия 3.x», я мог бы просто использовать «~> 3.0», что соответствует. В нынешнем виде это изменение операции на одном номере непоследовательно и недокументировано.
Более того, если бы я хотел сказать «Любая версия выше или равна 3» (например, 3.x, 4.x и т. д.), у меня возникло бы искушение использовать оператор «>=», о котором нам говорят это зло.
Есть ли причина такого поведения?
РЕДАКТИРОВАТЬ:
Я отдаю это Дэвиду за то, что он нашел файл преступника в rubygems. Существует «функция», которая автоматически расширяет «3» до «3.0» (Строка 148 в файле version.rb: "одноразрядные версии автоматически дополняются нулем для получения разумного результата".)
Должен сказать, что я не согласен с тем, что результат разумен, поскольку он нарушает ожидаемую последовательность и не позволяет сказать «Любая версия x, но не менее 3» с этим оператором. Таким образом, мы вынуждены использовать >=, который guide.rubygems.org предупреждает нас не использовать. Так или иначе. Может быть, этот пост послужит документацией, которую я искал...
"~> 3.0"
. Точность имеет значение. - person tadman   schedule 09.06.2014