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)

kompilieren
War es hilfreich?

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
scroll top