在 Ruby 中,“=>”是啥意思,它是如何工作的? [复制]

Posted

技术标签:

【中文标题】在 Ruby 中,“=>”是啥意思,它是如何工作的? [复制]【英文标题】:In Ruby what does "=>" mean and how does it work? [duplicate]在 Ruby 中,“=>”是什么意思,它是如何工作的? [复制] 【发布时间】:2011-06-07 11:28:05 【问题描述】:

在学习 Ruby 时,我偶尔会遇到“=>”运算符。通常我以

的形式看到它
:symbol => value

并且它似乎在向函数传递值时经常使用。那个运算符到底叫什么?它是什么/意味着什么?它是内置在 Ruby 中的,还是像 Rails 和 DataMapper 这样的不同框架添加到符号类中的东西?它只与符号类一起使用吗?谢谢。

【问题讨论】:

【参考方案1】:

=> 将键与哈希映射文字中的值分开。它不是可重载的,也不是专门连接到符号的。

hashmap 字面量的形式为key1 => value1, key2 => value2, ...,但当用作函数的最后一个参数时,您可以省略花括号。因此,当您看到像 f(:a => 1, :b => 2) 这样的函数调用时,f 会使用一个参数调用,该参数是一个哈希映射,具有键 :a:b 以及值 12

【讨论】:

欲了解更多信息,请参阅镐 tutorial section on Hashes 和 reference section on Hashes。请注意,在 Ruby 1.9 中,您也可以在像 foo: bar 这样的哈希中指定文字键/值对,这会将键创建为符号 :foo 把大问题分解成小问题。如果你了解了关联数组和 ruby​​ 符号,那么你理解 Hashes 就不会有任何问题。 所以澄清一下,这里有一个来自 DataMapper 属性的例子:title, String, :required => true, :length => 5..200 这和 property(:title, String , :required => true, :length => 5..200) ? 但我们也可以将这个=> 与rescue 一起使用...例如begin ... rescue SignalException, Interrupt, SystemExit => e...end【参考方案2】:

您可能会听到将此运算符称为“哈希火箭”,这意味着您在定义 ruby​​ 哈希时会使用它。

这是 Ruby Hash 文档,如果您不熟悉:http://www.ruby-doc.org/core/classes/Hash.html

请注意,在 Ruby 1.9 中,如果您要定义使用符号作为键的哈希,现在可以使用另一种语法:http://blog.peepcode.com/tutorials/2011/rip-ruby-hash-rocket-syntax

【讨论】:

【参考方案3】:

提示:如果您在像 :a => "A", :b => "B" 这样的哈希中使用它,在 Ruby 1.9 中,您可以像使用 JSON 哈希一样使用它:


  a: "A",
  b: "B"

【讨论】:

【参考方案4】:

如果您想进一步进行谷歌搜索,=> 有时也被称为 hashrocket,因为它看起来像火箭(就像 <=> 看起来像宇宙飞船一样),并且用于哈希。

或者你可以使用SymbolHound。

【讨论】:

@DustinMartin 我最近遇到了一个名为 SymbolHound 的搜索引擎,以防您在搜索其他语法时遇到困难。【参考方案5】:

除了In Ruby what does "=>" mean and how does it work?:

您通常会看到=> 来定义函数的参数。认为这是一个很好的便利:您不需要记住参数的正确顺序,因为所有参数都包装在一个巨大的散列中。因此,如果您有一个简单的辅助方法,例如

link_to "My link", my_path, :confirm => "Are you sure?"

这比

好太多了

link_to "My link", my_path, null, null, null, null, "Are you sure?"

只是因为你想使用一个很少使用的参数。因此,使用散列传递参数只是 Ruby/Rails 中的一种约定,以使生活更轻松。

【讨论】:

这也是错误的,因为你只会使用link_to "My link", my_path, confirm: "Are you sure?"

以上是关于在 Ruby 中,“=>”是啥意思,它是如何工作的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 ruby​​ 循环的结束标记中添加连字符是啥意思 <% -%>

&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]

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

在 Ruby 中按值传递是啥意思? [复制]

Ruby 中的 *(星号)是啥意思? [复制]

ruby 2.1.2中的“#$e”是啥意思