5 Stimmen

Abbildung einer Scala-Funktion mit einem optionalen Parameter

Ich habe Probleme, eine Funktion zuzuordnen, die einen optionalen Parameter benötigt. Ich erhalte den gleichen Typfehler, wie wenn der Parameter nicht optional wäre. Hier ist eine einfache Illustration:

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)

Es gibt eine Möglichkeit, dies zu bewerkstelligen, aber dazu muss das Standardargument wiederholt werden, was ein Alptraum für die Wartung ist:

scala> (1 to 5).map { n => multiple(n, 2) } 
res6: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)

Gibt es einen besseren Weg, dies zu tun? Allgemeiner gefragt: Warum scheint eine Funktion mit einem optionalen Parameter denselben Typ zu haben, wie wenn der Parameter nicht optional wäre? Was ist der tatsächliche Typ von multiple ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X