4
啪擴大在方法調用中的空數組有效地降低了參數沒有(空括號添加清晰度):我怎樣才能將雙摔跤參數摺疊成什麼?
def foo()
end
def bar(*args)
foo(*args)
end
bar(1) # ArgumentError, as expected
bar() # works
但同樣不適用於哈希的說法:
def baz()
end
def qux(**opts)
baz(**opts)
end
qux # ArgumentError, **opts becomes {}
我可以解決此通過一個空的哈希顯式檢查:
def quux(callable, **opts)
if opts.empty?
callable.()
else
callable.(**opts)
end
end
c = ->{}
quux(c) # works
但有一個更好的/更好的方式來做到這一點,或者是一個變化t o此行爲計劃?在編寫bar
和qux
時,我不知道foo
和baz
的簽名,因爲後者是工廠類構造函數包裝的一部分。
爲什麼你需要使用'** opts'? '* args'也應該和關鍵字參數一起工作。 –
我考慮的時間越長,我認爲這可能實際上是Ruby中的一個錯誤。如果'foo(* [])'起作用,'baz(** {})'也應該起作用。 –
@PatrickOscity使用參數的好處。不知何故忘了。我今天學會了雙splat語法,並且可能成爲一個有點專注於使用它的方面。對於我剛剛嘗試過的每個案例,只需使用'* args'即可,包括可選關鍵字和必需關鍵字參數的混合。所以我現在不需要這個工作。但我仍然同意你的第二個評論,我認爲這是不直觀的,也可能是無意的。我會在bug追蹤器上尋找它並提交報告。 – Kolja