回答
如果你指的是這樣的:
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. 什麼是視圖引擎?它實際上做了什麼?
- 2. Symfony緩存是什麼:clear實際上做了什麼?
- 3. 這實際上是做什麼的? - 瘋狂的C++函數
- 4. 什麼toString.call(數組)實際上做?
- 5. LenB實際上在無字符串參數上做什麼
- 6. strlen實際在做什麼?
- 7. PHP:警告中實際上「參數1」是什麼?
- 8. 什麼是Scala註釋實際上?
- 9. mb_internal_encoding()實際上是什麼意思?
- 10. InetAddress.isSiteLocalAddress()實際上是什麼意思?
- 11. 什麼是set_locale(LC_CTYPE,'C');實際上呢?
- 12. 實際上tensorflow會話是什麼?
- 13. 'flex-order'實際上是什麼意思?
- 14. 實際上php session_id是什麼?
- 15. `python setup.py check`實際上做了什麼?
- 16. numpy.cov實際上做了什麼
- 17. IMetadataExchange端點實際上做了什麼?
- 18. BlockingCollection.Dispose實際上做了什麼?
- 19. pdb文件實際上做了什麼?
- 20. Expression.Bind() - 它實際上做了什麼?
- 21. #include實際上做了什麼?
- 22. LD_INCLUDE_PATH實際上做了什麼嗎?
- 23. TortoiseSVN清理實際上做了什麼?
- 24. ld -m --verbose實際上做了什麼?
- 25. CascadeType.REFRESH實際上做了什麼?
- 26. Android SQLite - SQLiteDatabase.replace()實際上做了什麼?
- 27. android:stretchMode實際上做了什麼?
- 28. Int [] Reverse - 這實際上做了什麼?
- 29. std :: ofstream :: close()實際上做了什麼?
- 30. regsvr32 filename.ax實際上做了什麼?
這是一個紅寶石問題,而不是軌道問題。你應該閱讀紅寶石中的符號。 – Robin 2013-03-09 05:59:56