2013-03-09 155 views
0

我很難理解窗體:屬性=>參數什麼是:attribute =>參數實際上是做什麼的?

任何人都可以給我一些解釋嗎?是:屬性屬於類或其他東西的字段(變量)?爲什麼我們可以將這一對作爲一個參數傳遞給方法?

+0

這是一個紅寶石問題,而不是軌道問題。你應該閱讀紅寶石中的符號。 – Robin 2013-03-09 05:59:56

回答

2

如果你指的是這樣的:

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

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') 

這是紅寶石2.0.0具體的事實,你可以提供的是最後一個參數,它提供對於未命名的參數,在實踐中。在參數列表中使用1.9+哈希語法,您可以提供其他未命名的「參數」,這些參數可以出現在哈希參數後面。請注意,如果我使用了較舊的Hash語法,即:key =>'value'語法,我不會允許(至少在撰寫本文時)在末尾具有** other_params參數的參數列表。

您也可以在調用代碼中使用較新的語法提供散列,但在調用some_method時將其留作散列語法。

哈希仍然需要是調用參數列表中提供的最後一個,與方法定義的參數列表中指定的相同。

相關問題