0

我很难理解表格:attribute => parameter

谁能给我一些解释?:attribute 是属于该类的字段(变量)还是其他什么?为什么我们可以将这一对作为一个参数传递给方法?

4

2 回答 2

2

如果您指的是这样的事情:

some_method(:foo => "bar", :baz => "abc")

那么它只是导致 ruby​​ 将这些东西转换为哈希的简写。请注意,当使用这种形式时,散列必须是方法的最后一个参数才能使其工作。

根据上面的解释,这

some_method(:foo => "bar", :baz => "abc")

可以,但是这个

some_method(:foo => "bar", :baz => "abc", moo)

不是。

于 2013-03-09T05:55:51.370 回答
0

尽管您会在 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 仍然需要是调用参数列表中最后提供的,与方法定义的参数列表中指示的相同。

于 2013-03-09T07:22:42.130 回答