Wann sollte .empty im Vergleich zur leeren Singleton-Instanz verwendet werden?

Wenn Sie mit Sammlungen in Scala arbeiten, müssen Sie in der Regel die leere Instanz der Sammlung für einen Basisfall verwenden. Da die leeren Standardinstanzen die Auflistungstypklasse mit dem Typparameter erweiternNothing, es besiegt manchmal Typinferenz, um sie direkt zu verwenden. Zum Beispiel:

scala> List(1, 2, 3).foldLeft(Nil)((x, y) => x :+ y.toString())
<console>:8: error: type mismatch;
 found   : List[String]
 required: scala.collection.immutable.Nil.type
              List(1, 2, 3).foldLeft(Nil)((x, y) => x :+ y.toString())

                                                  ^

schlägt fehl, aber die folgenden zwei Korrekturen sind erfolgreich:

scala> List(1, 2, 3).foldLeft(Nil: List[String])((x, y) => x :+ y.toString())
res9: List[String] = List(1, 2, 3)

scala> List(1, 2, 3).foldLeft(List.empty[String])((x, y) => x :+ y.toString())
res10: List[String] = List(1, 2, 3)

Ein anderer Ort, an dem ich in ein ähnliches Dilemma geraten bin, ist die Definition von Standardparametern. Dies sind die einzigen Beispiele, an die ich auf Anhieb denken könnte, aber ich weiß, dass ich andere gesehen habe. Ist eine Methode zur Bereitstellung der richtigen Typhinweise der anderen im Allgemeinen vorzuziehen? Gibt es Orte, an denen jeder von Vorteil wäre?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage