bundler gem 悲观语义版本字符串 ~>1.7.15
bundler gem pessimistic semantic version string ~>1.7.15
我注意到 ruby 语义版本字符串中的一些意外行为,用于悲观运算符。
我觉得~> 1.7.15
应该同时满足1.7.20
和1.7.2
。但是我用 Gem::Requirement.satifsfied_by?
测试过,它说第一个是 true
但第二个是 false
.
~> 0.9.26
、0.9.30
和 0.9.3
相同。
谁能解释为什么会这样?
您对 semantic versioning 的工作原理有误解。
如果一个库的版本是1.7.0
,而作者在后续的发布中一直在更新补丁版本号,那么这个库的版本增加如下:
1.7.0
1.7.1
1.7.2
1.7.3
...
1.7.9
1.7.10
1.7.11
1.7.12
1.7.13
...
1.7.19
1.7.20
1.7.21
1.7.22
1.7.23
...
如果在某个时候 次版本号 发生碰撞,那么下一个版本将是 1.8.0
。
然后,如果在某个时候 主版本号 发生碰撞,那么下一个版本将是 2.0.0
。
版本 0.9.26
在 0.9.30
之前,但在 0.9.3
.
之后
版本 0.9.30
和版本 0.9.3
不是一回事。
版本是 String
,不是数字。
我注意到 ruby 语义版本字符串中的一些意外行为,用于悲观运算符。
我觉得~> 1.7.15
应该同时满足1.7.20
和1.7.2
。但是我用 Gem::Requirement.satifsfied_by?
测试过,它说第一个是 true
但第二个是 false
.
~> 0.9.26
、0.9.30
和 0.9.3
相同。
谁能解释为什么会这样?
您对 semantic versioning 的工作原理有误解。
如果一个库的版本是1.7.0
,而作者在后续的发布中一直在更新补丁版本号,那么这个库的版本增加如下:
1.7.0
1.7.1
1.7.2
1.7.3
...
1.7.9
1.7.10
1.7.11
1.7.12
1.7.13
...
1.7.19
1.7.20
1.7.21
1.7.22
1.7.23
...
如果在某个时候 次版本号 发生碰撞,那么下一个版本将是 1.8.0
。
然后,如果在某个时候 主版本号 发生碰撞,那么下一个版本将是 2.0.0
。
版本 0.9.26
在 0.9.30
之前,但在 0.9.3
.
版本 0.9.30
和版本 0.9.3
不是一回事。
版本是 String
,不是数字。