我有一個方法,我想在其中使用關鍵字引數和 case/when 陳述句,我更喜歡使用符號:
def navigate_to(page:)
case page
when :inbox
# some code
when :archive
# some code
else
# some code
end
end
這是呼叫方法時的正確語法嗎?
navigate_to page: :inbox
這: :似乎有點奇怪。
uj5u.com熱心網友回復:
關鍵字引數語法是:
key: value
如果 key 是page并且 value 是 symbol :inbox,你確實有:
page: :inbox
您也可以改用位置引數:
def navigate_to(page)
# same as your code
end
navigate_to :inbox
uj5u.com熱心網友回復:
是的,正確的語法是navigate_to page: :inbox.
雖然這是常見的 Ruby,但它對于幾個不同的東西來說是簡短的和等效的。首先是牙套。
你實際上是在打電話:
navigate_to(page: :inbox)
其次,關鍵字引數模式源自作為引數的散列。在有關鍵字引數之前,一種常見的方法是傳入一個 hash[1],如下所示:
def navigate_to(options)
page = options[:page]
end
navigate_to({ page: :inbox })
但是當方法呼叫中的最后一個引數是散列時,可以省略{}.
最后,散列中的實際鍵。不久前(1.8 -> 1.9 IIRC)為以下內容引入了一個簡短版本:
{ :page => 'Some Value' },即{ page: 'Some Value' }。當Some Value是一個符號時,它變成{ page: :inbox }。
所以,把所有這些:
navigate_to page: :inbox
源自:
navigate_to({ :page => :inbox })
像這樣閱讀它,或者知道它來自那個可能更有意義。
而且我知道 Ruby,也不知道 ruby??-ist,就像花括號一樣,()可以在例如 rspec 的令人難以置信的 DSL 中看到,但我可以建議特別是新開發人員添加它們。它通常使代碼更易于理解。
navigate_to(page: :inbox)可能是更容易理解比navigate_to page: :inbox,尤其是當你開始通過其他方法呼叫:navigate_to page page_from_session :user。
[1] 但是,要強調的是,這并不是這里真正發生的事情。關鍵字引數和哈希引數確實不同,現在我們有了關鍵字引數。這只是說明為什么語法是這樣的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330625.html
標籤:红宝石
上一篇:盡管條件應該阻止它,但已定義變數
