为什么Gemfile的语义版本操作符(~>)在一个数字上产生不一致的结果?[英] Why does the Gemfile semantic versioning operator (~>) produce inconsistent results with one number?

本文是小编为大家收集整理的关于为什么Gemfile的语义版本操作符(~>)在一个数字上产生不一致的结果?的处理方法,想解了为什么Gemfile的语义版本操作符(~>)在一个数字上产生不一致的结果?的问题怎么解决?为什么Gemfile的语义版本操作符(~>)在一个数字上产生不一致的结果?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

GEMSPEC语义版本控制操作员〜>(aka twiddle-wakka ,aka 悲观操作员)允许限制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的版本"(So 3.x,4.x等...)我很想使用"> ="操作员,我们被告知是邪恶的..

有这种行为的原因吗?

编辑:

我将其提供给David,以在RubyGems中找到罪魁祸首.有一个"功能"默默地扩展为" 3.0"(版本中的第148行.rb:"单二项式版本自动扩展为零以给出明智的结果.")

我必须说我不同意结果是明智的,因为它打破了预期的序列,并防止能够与该操作员说"任何版本X,但至少3个".因此,我们被强迫> = whoid.rubygems.org 警告我们不要使用.反正.也许这篇文章将作为我一直在寻找的文档...

推荐答案

通过窥视RubyGems来源(尤其是repureent.rb,version.rb),悲观的操作员至少需要两个版本的段.

这也确实有意义.因为~> v.r只是不平等的句法糖

v.r <= current_version.current_release < (v+1).0

如果只有一个版本号,上限将是什么?是的,∞(无穷大),所以没有意义为什么它应该起作用.您可以简单地将其写成>= v.

本文地址:https://www.itbaoku.cn/post/786330.html