2017-07-12 6 views
0

Ich experimentiere mit impliziten Konvertierung Feature von Scala.Scala implizite Konvertierung: Konvertierung von Int in Liste druckt keine Liste beim Drucken der Integer-Variablen

Ich habe versucht, ein Verfahren zur impliziten Konvertierung von Int Schreiben zur Liste von drei gleichen Zahlen

Obwohl die Liste Methoden sind anwendbar, aber wenn wir den Wert drucken es zeigt immer noch als Integer

scala> implicit def conversion(x:Int) = List(x,x,x) 
conversion: (x: Int)List[Int] 

scala> 1 
res31: Int = 1 

scala> res31.length 
res32: Int = 3 

scala> res31.tail 
res33: List[Int] = List(1, 1) 

scala> println(res31) 
1 

Beliebig Ideen, warum es so ein Verhalten zeigt? Im Idealfall sollte es wie folgend drucken:

Antwort

2

Implizite Konvertierungen treten nur ein, wenn der ursprüngliche Wert nicht angewendet werden kann, z. Es gibt keine Methode mit einem solchen Parameter. Da Sie einen Int drucken können, ist es für Scala nicht erforderlich, eine Konvertierung anzuwenden. Sie können es mit Kraft: println(res31:List[Int])

1

das Dokument sehen: http://docs.scala-lang.org/tutorials/tour/implicit-conversions.html

Implizite Konvertierungen in zwei Situationen angewandt werden:

Wenn ein Ausdruck e vom Typ S ist, und S entsprechen nicht die Art T. erwartet Ausdruck In einer Auswahl em mit e vom Typ S, wenn der Wähler m bezeichnet kein Mitglied von S.

so f oder Ihr Beispiel, es gibt keine type conversion auftreten, außer res31.tail, in res31.tail müssen List Typ tail Methode, diese Aktion Auslöser implicit Umwandlung aufrufen. Die anderen Aktionen lösen nicht aus implizite Konvertierung.

0

als Liste drucken Sie verwenden können, println (res53.toList)

1

println ein Argument vom Typ erwartet Any, so gibt es keine Notwendigkeit für implizite Konvertierung. In den ersten beiden Fällen hat Int keine Methoden mit den Namen length oder tail aber List hat sie, deshalb findet die Konvertierung in diesen Ausdrücken statt.

Verwandte Themen