我有點被咖喱和uncurried通用功能之間的類型檢查的區別感到困惑:通用類型的統一:多個參數(T,T)與多個參數列表(T)(T)?
scala> def x[T](a: T, b: T) = (a == b)
x: [T](a: T, b: T)Boolean
scala> def y[T](a: T)(b: T) = (a == b)
y: [T](a: T)(b: T)Boolean
我的直覺是,這兩個x(1, "one")
和y(1)("one")
應該給類型錯誤,但是我錯了:
scala> x(1, "one")
res71: Boolean = false
scala> y(1)("one")
<console>:9: error: type mismatch;
found : java.lang.String("one")
required: Int
y(1)("one")
^
起初我還以爲有某種隱式轉換的事情,但似乎並沒有這樣的情況:
scala> x(1 :Int, "one" :String)
res73: Boolean = false
那麼這是怎麼回事?我的直覺應該是什麼?
我已經看到了這一個重複很久以前。我也相信這個[幾乎]確切的案例在SLS中有記錄。 – 2012-01-05 20:47:14
我們走了。我已經更新了,因爲'Y(1:任意)的標題與重要術語「多參數列表」,這是在SLS :) – 2012-01-05 20:55:21