在 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
以及值 1
和 2
。
【讨论】:
欲了解更多信息,请参阅镐 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 循环的结束标记中添加连字符是啥意思 <% -%>
&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]