我正在嘗試創建一個函式來檢查條件是否適用并運行任何可能的運算式,如果條件不適用,此函式回傳默認值,我可以通過以下方式執行此操作:
def executeOnCondition[T](condition: Boolean, default: T)(f: => T): T = if (condition) f else default
但是我希望這個函式被柯里化,以便它首先采用條件和默認值,然后才執行運算式。想象用途:
val useLater = executeOnCondition(true, 3.14)
// do stuff
useLater { 3.14 * 2}
但是當我嘗試以預期的方式創建我的咖喱函式時:
def executeOnCondition[T](condition: Boolean, default: T) = (f: => T) => { if (condition) f else default }
我收到此編譯錯誤:
identifier expected but '=>' found.
我想這個問題與泛型的使用有關,任何人都可以解釋一下并提供解決方法嗎?
非常感謝
uj5u.com熱心網友回復:
這是正確的語法:
def executeOnCondition[T](condition: Boolean, default: T): (=> T) => T =
block => if (condition) block else default
由于某種原因(錯誤?)=> T,即使型別有效,您也不能將型別輸入為 lambda 輸入的型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393195.html
下一篇:在模板中使用不完整的模板型別
