2012-10-15 12 views
12

Questa linea causa un errore di compilazione:Come stampare un elenco di stringhe con errore standard in Scala?

astgen.typeError.foreach(System.err.println) 

TypeError è uno scala.collection.immutable.List di stringhe nella astgen oggetto.

L'errore che sto ottenendo è:

error: ambiguous reference to overloaded definition, 
both method println in class PrintStream of type (java.lang.String)Unit 
and method println in class PrintStream of type (Array[Char])Unit 
match expected type (Nothing) => Unit 
     astgen.typeError.foreach(System.err.println) 

Sono nuovo di Scala e non capisco il problema. Utilizzando 2.7.7 finale.

+0

ho potuto riprodurre il problema nella versione 2.9.1. Che versione stai usando? Stai parlando di Scala's List o di Java? – pedrofurla

+1

Si dovrebbe considerare l'aggiornamento, 2.7.7 è preistorico. Questo problema è stato risolto in una versione più recente. – soc

+0

Ops, intendevo che non potevo riprodurre il problema in 2.9.1. E infatti @soc ha ragione, 2.7.7 è paleolitico. – pedrofurla

risposta

15

Anche non essere in grado di riprodurre esattamente il problema, so si può risolvere l'ambiguità specificando il tipo:

scala> List("a","b","c") 
res0: List[java.lang.String] = List(a, b, c) 

scala> res0.foreach(System.err.println(_:String)) 
a 
b 
c 

In questo esempio il _:String è inutile, forse necessario, nel vostro caso d'uso.

11

Secondo RosettaCode, chiamando il built-in Console API è meglio che chiamare la libreria di runtime Java con System.err:

scala> List("aa", "bb", "cc").foreach(Console.err.println(_)) 
aa 
bb 
cc 
+0

Solo 'System.err' accede a stderr come destinazione Logback. 'Console.err' non funziona se specificato come target, quindi registra ancora su stdout. – kap

Problemi correlati