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

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

的形式看到它
:symbol => value

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

【问题讨论】:

    标签: ruby-on-rails ruby operators symbols hashrocket


    【解决方案1】:

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

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

    【讨论】:

    • 欲了解更多信息,请参阅镐 tutorial section on Hashesreference 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?"
        猜你喜欢
        • 2023-03-15
        • 2014-04-09
        • 2011-04-17
        • 2011-07-27
        • 2011-06-29
        • 2014-10-06
        • 2021-09-16
        • 2016-08-17
        • 2011-04-25
        相关资源
        最近更新 更多