:attribute => 参数实际上有什么作用?



我很难理解这个形式:attribute => parameter

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

如果你指的是这样的东西:

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

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

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

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

最新更新