回答
如果你指的是這樣的:
some_method(:foo => "bar", :baz => "abc")
那麼它只是速記導致紅寶石那些東西轉換成散列。請注意,使用此表單時,爲了使其工作,散列必須是該方法的最終參數。
基於以上的解釋,這
some_method(:foo => "bar", :baz => "abc")
是好的,但這種
some_method(:foo => "bar", :baz => "abc", moo)
不是。
當我們使用這種形式時,實際上傳遞了什麼?值「bar」或索引:foo?或整個哈希表? – OneZero 2013-03-09 06:12:01
@ 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時將其留作散列語法。
哈希仍然需要是調用參數列表中提供的最後一個,與方法定義的參數列表中指定的相同。
- 1. to_i參數實際上是做什麼的?
- 2. Symfony緩存是什麼:clear實際上做了什麼?
- 3. 什麼是HTML5 File.slice方法實際上在做什麼?
- 4. 什麼是視圖引擎?它實際上做了什麼?
- 5. 什麼是+ =(o,arg)=>實際實現?
- 6. 這實際上是做什麼的? - 瘋狂的C++函數
- 7. 什麼toString.call(數組)實際上做?
- 8. 什麼是模式:墊片實際在做什麼?
- 9. 什麼是Bnd @Attribute註解?
- 10. LenB實際上在無字符串參數上做什麼
- 11. Python的__file__實際上做了什麼?
- 12. Java中實際是什麼?
- 13. strlen實際在做什麼?
- 14. 什麼是 「>」 做CSS
- 15. 'flex-order'實際上是什麼意思?
- 16. 什麼是set_locale(LC_CTYPE,'C');實際上呢?
- 17. 實際上php session_id是什麼?
- 18. QFE_Richmond實際上是什麼意思?
- 19. 實際上tensorflow會話是什麼?
- 20. mb_internal_encoding()實際上是什麼意思?
- 21. 「框架」實際上是什麼意思?
- 22. 什麼是Scala註釋實際上?
- 23. InetAddress.isSiteLocalAddress()實際上是什麼意思?
- 24. PHP:警告中實際上「參數1」是什麼?
- 25. Xcode中的「主界面」實際上是什麼*做*?
- 26. gwt PlaceTokenizer實際上做了什麼?
- 27. Arduino F():它實際上做了什麼
- 28. numpy.cov實際上做了什麼
- 29. rake db:migrate實際上會做什麼?
- 30. ADMManifest.checkManifestAuthoredProperly()實際上做了什麼?
這是一個紅寶石問題,而不是軌道問題。你應該閱讀紅寶石中的符號。 – Robin 2013-03-09 05:59:56