2017-07-12 3 views
0

私はスカラーの暗黙の変換機能を試しています。スカラー暗黙の変換:IntをListに変換すると整数変数の出力時にリストが出力されない

リスト方式が適用されているが、我々は値を印刷するとき、それはまだ整数

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 

どれとして示しているが、私は3と同じ整数のリストへのInt

から暗黙的な変換のための方法を書いてみましたなぜそれがそのような行動を示しているのか?理想的には、次のように印刷する必要があります。

List(1, 1, 1) 

答えて

2

暗黙的な変換は、元の値を適用できない場合にのみ有効です。このようなパラメータを持つメソッドはありません。 Intを印刷することができるので、変換を適用するためにスカラーが「必要はありません」。あなたがそれを強制することができます println(res31:List[Int])

1

は、ドキュメントを参照してください:式eの型がSであり、そしてSはに準拠していない場合は

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

暗黙の変換が2つの状況で適用されています式の期待される型T セレクタmがSのメンバを表さない場合、セレクタmがSのメンバを示さない場合、

fまたはあなたの例は、res31.tailを除いてtype conversionが発生しませんListtailメソッドを呼び出す必要がありますres31.tailのこのアクショントリガーimplicit変換。他のアクションは暗黙の変換をトリガーしません。あなたが使用できるリストとして印刷するには

0

、 のprintln(res53.toList)

1

printlnはタイプAnyの引数を期待し、その暗黙の型変換は必要ありません。最初の2つのケースでは、Intにはlengthまたはtailという名前のメソッドはありませんが、Listにはそのメソッドがあります。そのため、これらの式で変換が行われます。

関連する問題