Tôi là một chút bối rối bởi sự khác biệt về kiểu kiểm tra giữa cà ri và chức năng chung uncurried:Hợp nhất loại chung: nhiều tham số (T, T) so với nhiều danh sách tham số (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
trực giác của tôi là cả hai x(1, "one")
và y(1)("one")
nên cung cấp cho các lỗi loại, nhưng tôi đã sai:
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")
^
Lúc đầu, tôi nghĩ là có một số loại đúc tiềm ẩn xảy ra, nhưng điều đó dường như không phải là trường hợp:
scala> x(1 :Int, "one" :String)
res73: Boolean = false
Vì vậy, những gì đang xảy ra? Trực giác của tôi nên là gì?
Tôi đã nhìn thấy một bản sao của điều này một thời gian dài trước đây. Tôi cũng tin rằng trường hợp chính xác [gần như] này được ghi lại trong SLS. –
Có, chúng tôi đi. Tôi đã cập nhật tiêu đề với thuật ngữ quan trọng "nhiều danh sách tham số", được thảo luận trong SLS :) –