【问题标题】:When can I omit curly braces for a Ruby hash?什么时候可以省略 Ruby 哈希的花括号?
【发布时间】:2019-07-26 15:52:28
【问题描述】:

所以这在 Ruby 中是合法的:

puts key: "value"

{:key=>“值”}

但这不是:

hsh = key: "value"
puts hsh

sandbox.rb:1: 语法错误,意外 ':',期待输入结束

hsh = 键:“值”

为什么不呢?我什么时候可以省略散列的花括号?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    当哈希是传递给函数的最后一个参数时,您可以省略大括号。因此,例如,Rails link_to 助手中的选项不需要它们,但在 hsh = key: "value" 示例中确实需要它们,因为没有函数可以将哈希作为参数。

    【讨论】:

      【解决方案2】:

      当哈希是方法调用的最后一个参数时,您可以省略大括号。当你写:

       puts key: 'value'
      

      你实际上调用了puts方法,参数为{key: value},所以你可以这样写:

      puts({key: 'value'})
      

      但在 Ruby 中,您可以跳过普通大括号和大括号。

      要详细了解它的工作原理,请考虑以下示例:

      # Hash as only paramter
      puts(a:1)
      #{:a=>1}
      
      # Hash as a last parameter
      puts('cat', a: 1)
      #cat
      #{:a=>1}
      
      # Hash as a first parameter - cannot skip
      puts(a: 1, 'cat')
      # >> SyntaxError: unexpected ')', expecting =>
      # >> puts(a: 1, 'cat')
                      ^
      puts({a: 1}, 'cat')
      #{:a=>1}
      #cat
      
      # Two hashes
      puts({a: 1}, {b: 2})
      #{:a=>1}
      #{:b=>2}
      
      puts({a: 1}, b: 2)
      #{:a=>1}
      #{:b=>2}
      

      【讨论】:

      • 这是我可以省略花括号的唯一次吗?我还看到了这样一种约定:当它是函数调用的最后一个参数时,可以省略花括号。如果不是,那该怎么办?
      • 我不记得有任何其他情况可以写key: 'value' 而不是{key: 'value'}。你有什么令人不安的例子吗?
      • Ruby 只允许省略最后一个参数的大括号(见我的回答)。如果您尝试使用一个参数后面有另一个参数,它会失败,因为 Ruby 无法应对 - 毕竟它必须做出一些假设。
      • 根据这些建议更新。
      • 不在提供的上下文中,但从技术上讲,instance.attribute= 是一个方法调用,但在这种情况下您也不能省略大括号。
      猜你喜欢
      • 2013-01-31
      • 2014-01-24
      • 2010-11-13
      • 2012-09-02
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多