我無法映射帶有可選參數的函數。如果參數不是可選的,我會得到與我相同的類型錯誤。這裏有一個簡單的例子:使用可選參數映射Scala函數
scala> def multiple(m: Int, n: Int = 2) = m * n
multiple: (m: Int,n: Int)Int
scala> multiple(5)
res0: Int = 10
scala> multiple(5, 7)
res1: Int = 35
scala> (1 to 10).map(multiple)
<console>:7: error: type mismatch;
found : (Int, Int) => Int
required: (Int) => ?
(1 to 10).map(multiple)
下面就來使其工作的一種方式,但它需要重複的默認參數,這是一個維護的噩夢:
scala> (1 to 5).map { n => multiple(n, 2) }
res6: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)
有沒有更好的辦法做到這一點?更一般地說,爲什麼具有可選參數的函數看起來與參數不是可選參數時類型相同?什麼是multiple
的實際類型?
感謝;這是我將使用的解決方案。你能解釋爲什麼編譯器將'map(multiple)'和'map(multiple(_))'區別對待嗎? – dkh 2011-04-05 15:18:05
@dkh:我想真正的原因是多功能的第一個參數是必需的。 – Michelle 2017-04-11 06:39:04