2017-07-12 57 views
0

我正在試驗scala的隱式轉換特性。斯卡拉隱式轉換:將Int轉換爲List不打印列表打印整型變量

我試着寫了從int隱式轉換的方法,以列出三個相同的整數

雖然列表方法都適用,但是,當我們打印出值仍顯示爲整數

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 

任何的想法爲什麼它顯示這樣的行爲?理想情況下,它應該打印如下:

List(1, 1, 1) 

回答

2

隱式轉換隻在原始值無法應用時纔會啓動,例如,沒有這樣的參數的方法。因爲您可以打印一個Int,所以scala不需要應用轉換。您可以強制它: println(res31:List[Int])

1

請參閱文檔:http://docs.scala-lang.org/tutorials/tour/implicit-conversions.html

隱式轉換在兩種情況下適用於:

如果表達式e是S型和S不符合表達式的預期類型T. 在e類型爲S的選擇em中,如果選擇符m不表示S的成員。

so f或者你的例子中,沒有type conversion發生除res31.tail之外,在res31.tail需要調用List類型tail的方法,這個動作觸發implicit轉換。其他操作不會觸發隱式轉換

0

要打印,你可以使用列表, 的println(res53.toList)

1

println預計Any類型的參數,所以沒有必要隱式轉換。在前兩種情況下,Int不具有名爲lengthtail的方法,但List具有它們,這就是爲什麼在這些表達式中進行轉換的原因。