2
ここでスカラーコンパイラは何をしていますか?メソッドを呼び出すときの型依存の暗黙のキャスト
def f[A](x: A): A = {
x
}
f(1,2,3)
res0: (Int, Int, Int) = (1,2,3)
私は、可変長引数であることをx
を求めていませんよ。しかし、コンパイラは引数リストを製品タイプにキャストしているようです。私は型を指定した場合
、例えば
def f(x: Int): Int = {
x
}
してから呼び出すしよう
f(1,2,3)
コンパイラはtoo many arguments (3) for method f
が、それはExpected Int and found (Int, Int, Int)
を言うべきではないと主張していますか?
これはなぜですか?
2番目のケースでは、それは実行されないので、関数型でキャスティングがdepedentです。 –
@raul:はい、関数/メソッドのアプリケーション、オーバーロード、型推論などに関しては、Scalaコンパイラにはあらゆる種類の規則があります。これはScalaの面倒な領域の1つです。 [Dotty](http://dotty.epfl.ch/docs/reference/auto-parameter-tupling.html)では状況がさらに複雑になります。 –