請原諒我,如果這已被問到別處。我有一個涉及函數值和隱式參數的Scala語法問題。帶有隱含的斯卡拉功能性文字
我很喜歡用Scala的咖喱特性使用implicits。舉例來說,如果我有一個求和函數,並希望讓第二個參數的隱式:
scala> def sum(a: Int)(implicit b: Int) = a + b
sum: (a: Int)(implicit b: Int)Int
有沒有辦法做到這一點使用的函數值的語法?忽略隱含了一會兒,我通常寫咖喱函數值是這樣的:
scala> val sum2 = (a: Int) => (b: Int) => a + b
sum: (Int) => (Int) => Int = <function1>
然而,在第二種方法的函數簽名有很大不同(在鑽營被表達明確)。只需添加隱關鍵字B沒有多大意義和編譯器抱怨以及:
scala> val sum2 = (a: Int) => (implicit b: Int) => a + b
<console>:1: error: '=>' expected but ')' found.
val sum2 = (a: Int) => (implicit b: Int) => a + b
^
從最初的做法此外局部應用和得到一個函數值導致的問題,以及:
scala> val sumFunction = sum _
<console>:14: error: could not find implicit value for parameter b: Int
val sumFunction = sum _
^
這使我相信具有隱式參數的函數必須在創建函數值時確定所述參數,而不是稍後應用函數值時確定。這是真的嗎?你可以使用一個隱式參數與函數值?
感謝您的幫助!
不幸的是,我沒有給你一個答案,但我有一個澄清的問題:在你的第二段你談論一個'sum' *功能*,但你的相應的代碼示例顯示了'sum' *方法*。你是指哪一個? – 2011-06-13 02:45:39
嗨Jörg - 我的理解是,一個方法只是一個與類或對象相關的函數。以上所有功能都被輸入到Scala REPL中;沒有創建用戶定義的類或對象。所以我會說我們只在這裏處理函數。 – shj 2011-06-13 03:34:39