我很难理解表格:attribute => parameter
谁能给我一些解释?:attribute 是属于该类的字段(变量)还是其他什么?为什么我们可以将这一对作为一个参数传递给方法?
我很难理解表格:attribute => parameter
谁能给我一些解释?:attribute 是属于该类的字段(变量)还是其他什么?为什么我们可以将这一对作为一个参数传递给方法?
如果您指的是这样的事情:
some_method(:foo => "bar", :baz => "abc")
那么它只是导致 ruby 将这些东西转换为哈希的简写。请注意,当使用这种形式时,散列必须是方法的最后一个参数才能使其工作。
根据上面的解释,这
some_method(:foo => "bar", :baz => "abc")
可以,但是这个
some_method(:foo => "bar", :baz => "abc", moo)
不是。
尽管您会在 Rails 中经常看到这一点,但这并不是 Rails 特有的问题。它是红宝石。
您的问题的答案是它是哈希中的键/值对,通常作为参数传递给方法。
当它被直接分配给一个变量时,您也会看到这一点。但是让我向您展示一个示例方法和示例用法,以便您可以将它们放在一起:
def some_method(*args, name: 'Joe', amount: 42, **other_params )
puts "#{name}, #{amount}, glob of arguments = #{args.inspect}",
"other params #{other_params}"
end
some_method(:occupation => 'programmer', :phone => '123-456-7890', name: 'Jane')
这是 Ruby 2.0.0 特有的,因为您可以在实践中提供最后一个参数,该参数提供未命名参数。在参数列表中使用 Hash 的 1.9+ 语法,您可以提供其他可能出现在哈希参数之后的未命名“参数”。
请注意,如果我使用 Hash 的旧语法,即 :key => 'value' 语法,我将不允许(至少在撰写本文时)在参数列表的末尾有 **other_params 参数.
您也可以在调用代码中使用较新的语法提供散列,尽管我在调用 some_method 时将其保留为散列语法。
Hash 仍然需要是调用参数列表中最后提供的,与方法定义的参数列表中指示的相同。