Mit varargs von Scala
-
06-07-2019 - |
Frage
Ich bin reißen mir die Haare, um herauszufinden, wie die folgenden Aufgaben:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, o :: List(os:_*)) )
}
Es gibt einen Grund, warum ich die Methode mit einer o
und einem os
Seq
separat zu erklären habe. Grundsätzlich ende I mit dem Format Verfahren up mit einem einzigen Objektparameter genannt (vom Typ List
). Der Versuch:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, (o :: List(os:_*))).toArray )
}
Gibt mir den Typ Fehler:
gefunden: Array [Alles]
erforderlich Seq [java.lang.Object]
Ich habe Casting versucht, die kompiliert, aber für so ziemlich den gleichen Grund wie das erste Beispiel schlägt fehl. Wenn ich versuche,
println(String.format(msg, (o :: List(os:_*)) :_* ))
dies nicht gelingt mit impliziter Konvertierung Mehrdeutigkeit (any2ArrowAssoc
und any2stringadd
)
Lösung
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( String.format(msf, (o :: os.toList).toArray : _* ))
Andere Tipps
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( String.format(msf, o :: os.toList : _* ) )
oder
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( msf format (o :: os.toList : _* ) )
ich viel letzteres bevorzugen, obwohl es keine locale hat * Unterstützung.
- Scala 2.8 hat Locale-Unterstützung mit RichString des Format.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow