波浪号大于 (~>) 在 Ruby gem 依赖项中是啥意思? [复制]

Posted

技术标签:

【中文标题】波浪号大于 (~>) 在 Ruby gem 依赖项中是啥意思? [复制]【英文标题】:What does tilde-greater-than (~>) mean in Ruby gem dependencies? [duplicate]波浪号大于 (~>) 在 Ruby gem 依赖项中是什么意思? [复制] 【发布时间】:2011-07-07 10:23:18 【问题描述】:

~> 在 Ruby gem 依赖的上下文中是什么意思?

例如,在 RubyMine IDE 中打开旧项目时,我得到了这个 留言

项目所需的宝石未附: arel (~> 2.0.2), rspec-expectation (~> 2.5.0)...

我在 Ruby 世界的其他地方看到过这种波浪号大于符号(它不是 特定于 RubyMine)。此操作员是否有其他名称 听起来很尴尬的波浪号大于

【问题讨论】:

@Jörg,感谢您指出重复。我已投票结束我的问题。我还编辑了另一个问题的标题以包含“波浪号大于”以帮助进行文本搜索。 我现在听说这个算子叫做“twiddle-wakka”、“近似版本”和“悲观版本”(rubyrogues.com/045-rr-bundler-with-andre-arko) 我称之为“曲线火箭”,而不是“哈希火箭”(=>)。 我最近听说它叫做“模糊匹配”运算符。 另一个变种:“悲观版本操作符”rubytapas.com/2016/09/29/episode-447-pessimize 【参考方案1】:

它的意思是“等于或大于最后一位”,例如~> 2.3 表示 “等于 2.3 或大于 2.3,但小于 3.0”,而 ~> 2.3.0 将 表示“等于 2.3.0 或大于 2.3.0,但小于 2.4.0”。

您可以将其发音为“大约大于”。

§ Pessimistic version constraint

【讨论】:

大约大于!这很有意义——~ 表示“大约”,> 表示“大于”。我一直以为~>应该看起来像一个箭头,并没有真正理解符号的特殊选择......突破。 请注意,~> 2~> 2.0 的行为相同,并且都会生成与 >= 2.0< 3.0 匹配的版本【参考方案2】:

这意味着任何低版本等于或大于,但不是主要版本。

例如arel (~> 2.0.2),将使用(如果可用)版本

2.0.2 2.0.3 2.0.? (只要 ? >= 2)

但它不会使用 2.1.?

【讨论】:

2.1不是小版本吗?【参考方案3】:

根据互联网

如果 RubyGem 依赖项使用语法“~> 1.4.37”,则表示“版本大于或等于 1.4.37,但不是 1.5 或更高”。 1

换句话说,对于你arel 可以是2.1 > version >= 2.0.2 并且rspec-expectation 可以是2.6 > version >= 2.5.0

【讨论】:

【参考方案4】:

这意味着您期望的 gem 是 2.0.2 或更高版本,但在 arel (~> 2.0.2) 的情况下不是 2.1@ 这样做是因为人们不应该在次要修订中发布破坏性语法更改。所以arel 2.0.3 预计会在 2.0.2 上进行错误/稳定性修复

【讨论】:

以上是关于波浪号大于 (~>) 在 Ruby gem 依赖项中是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Scala ~>(波浪号大于)运算符

css选择器易混符号(~波浪号、+加号、>大于号)

css选择器 ~ (波浪号)、+(加号)、>(大于号)的用法解析和举例

在 Gemfile 中指定 ruby​​gem 时 ~> 和 >= 有啥区别?

Rails:找不到 gem 'sdoc (>=0) ruby​​'

gem install 无法从 ruby​​gems.org 下载