做什么:attribute =>参数实际上呢?

时间:2013-03-09 05:51:03

标签: ruby-on-rails ruby

我很难理解表单:attribute =>参数

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

2 个答案:

答案 0 :(得分:2)

如果您指的是这样的话:

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

然后它只是简写,导致ruby将这些东西转换为哈希。请注意,使用此表单时,哈希必须是方法的最终参数才能使其生效。

基于上面的解释,这个

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

没问题,但是这个

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

不是。

答案 1 :(得分:0)

虽然您会在Rails中看到这一点,但它不是Rails特定的问题。这是Ruby。

你的问题的答案是它是哈希中的键/值对,通常作为参数传递给方法。

当直接将变量分配给变量时,您也会看到这一点。但是,让我向您展示一个示例方法和一个示例用法,以便您可以将它们组合在一起:

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的事实,你可以在实践中提供最后一个提供未命名参数的参数。在参数列表中使用1.9+语法进行哈希,您可以提供其他未命名的“参数”,这些参数可以出现在哈希参数之后。

请注意,如果我将旧语法用于Hash,即:key => 'value'语法,我不允许(至少在撰写本文时)在参数列表的末尾加上** other_params参数。

您也可以使用调用代码中的较新语法提供哈希值,但在调用some_method时我将其保留为哈希语法。

Hash仍然需要是调用参数列表中提供的最后一个,与方法定义的参数列表中指示的相同。