我很难理解表单:attribute =>参数
有人可以给我一些解释吗?是:属性属于该类或其他的字段(变量)?为什么我们可以将这一对作为一个参数传递给方法?
答案 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仍然需要是调用参数列表中提供的最后一个,与方法定义的参数列表中指示的相同。