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

问题描述:

我很难理解窗体:属性=>参数什么是:attribute =>参数实际上是做什么的?

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

+0

这是一个红宝石问题,而不是轨道问题。你应该阅读红宝石中的符号。 – Robin 2013-03-09 05:59:56

如果你指的是这样的:

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

那么它只是速记导致红宝石那些东西转换成散列。请注意,使用此表单时,为了使其工作,散列必须是该方法的最终参数。

基于以上的解释,这

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

是好的,但这种

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

不是。

+0

当我们使用这种形式时,实际上传递了什么?值“bar”或索引:foo?或整个哈希表? – OneZero 2013-03-09 06:12:01

+0

@ user1229490:整个Hash,'f(:a => b)'与'f({:a => b})'相同。 – 2013-03-09 06:21:15

虽然你会在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') 

这是红宝石2.0.0具体的事实,你可以提供的是最后一个参数,它提供对于未命名的参数,在实践中。在参数列表中使用1.9+哈希语法,您可以提供其他未命名的“参数”,这些参数可以出现在哈希参数后面。请注意,如果我使用了较旧的Hash语法,即:key =>'value'语法,我不会允许(至少在撰写本文时)在末尾具有** other_params参数的参数列表。

您也可以在调用代码中使用较新的语法提供散列,但在调用some_method时将其留作散列语法。

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