https://rubygems.org/gems/bcrypt/versions/3.1.11
的bcrypt宝石显示了这种用法
gem 'bcrypt', '~> 3.1', '>= 3.1.11'
为什么有两个版本的spermy悲观操作符?
我们通常只为其他宝石使用一个版本
答案 0 :(得分:3)
'~> 3.1'
表示所需的版本可以是3.1.x
或3.2.x
或3.3.x
或...,但绝不会达到4.0
。
'>= 3.1.11'
的含义非常明确。
所以把它们放在一起,就意味着版本可以是3.x.y
x >= 2
或x = 1 and y >= 11
。
也许这种表示法更清晰:
gem 'bcrypt', '>= 3.1.11', '< 4'
答案 1 :(得分:2)
>= 3.1.11
是一个“乐观”的版本约束。它说来自3.1.11
的所有更改都有效,但对于版本4.0.0
,这不会是真的。
~> 3.1
是“悲观的”。这明确排除了可能破坏您的代码的版本。它基本上是>= 3.1
和< 4.0
。但是如果你有~> 3.1.1
,它将等于>= 3.1.1
但小于3.2
如果您想允许使用较新的向后兼容版本,但需要特定的错误修复,则可以使用'~> 3.1', '>= 3.1.11'
这样的复合要求。详细信息请参见http://guides.rubygems.org/patterns/#pessimistic-version-constraint 如果您要允许使用较新的向后兼容版本但需要特定的错误修复,您可以使用复合要求,例如... '~> 2.2', '>= 2.2.1'