これは、printString(_:Int)
実際に行われているのは、Intを取り、おそらく呼び出されない関数でその式を変換することであるためです...を参照してください。
scala> implicit def int2string(i: Int): String = "foo"
int2string: (i: Int)String
scala> def printString(i: String) = print(i)
printString: (i: String)Unit
ここで構文エラーがないということは、それが機能していることを意味します。例として:
scala> printString(_:Int) // Function from Int to Unit
res0: Int => Unit = <function1>
コンパイラは外部式を{ x:Int => printString(x) }
に変換し、暗黙がスコープ内にあるため暗黙変換を適用します。したがって、結果はになり{ x:Int => printString(int2string(x)) }
ます。
オブジェクトから文字列への変換がないため、機能していません。
scala> printString(_:Object)
<console>:10: error: type mismatch;
found : java.lang.Object
required: String
printString(_:Object)
ここで実際に印刷を確認するには、それを呼び出す必要があります。
scala> val foo = printString(_:Int)
foo: Int => Unit = <function1>
scala> foo(5)
foo