Trong Haskell bạn có thể viết:Việc giải nén tuple có được hỗ trợ trực tiếp trong danh sách tham số trong Scala không?
x :: (Int,Int) -> Int
x (p,s) = p
Trong Scala bạn sẽ viết:
def x(a: (Int, Int)) = a._1
hay:
def x(a: (Int, Int)) = a match {
case (p, s) => p
}
Tại sao không có một cái gì đó giống như
def x(_: (p: Int, s: Int)) = p
hoặc
def x(foo: (p @ Int, s @ Int)) = p
?
Loại đối sánh mẫu đó sẽ không hữu ích nếu bạn chỉ có thể có * một * phương thức xác định. Bạn sẽ cần nhiều định nghĩa như trong Haskell để làm cho nó * thực sự * hữu ích, và điều này sẽ thay đổi cấu trúc của ngôn ngữ một cách đáng kể. – Landei
Để làm rõ nhận xét của @ Landei, Haskell không cho phép nhiều định nghĩa của một hàm. Nó chỉ có đường đẹp cho phù hợp với mô hình. Trong thuật ngữ Scala nó giống như bạn có thể viết "def f [A] (Một số (p: A), alt: A) = p; def f (None, alt: A) = alt" thay vì "def f (x: Tùy chọn [A], alt: A) = x khớp với {case Some (p) => p; case None => alt} ". Thật không may, Scala có quá tải kiểu Java và các kiểu dữ liệu đại số thông qua phân lớp, cả hai đều tạo ra sự mơ hồ. –
@ James Iry: Vâng, tôi biết về mặt kỹ thuật "nhiều định nghĩa" trong Haskell chỉ là các câu lệnh 'case ... of' ẩn. Nhưng từ quan điểm của người dùng, đây chỉ là một chi tiết thực hiện. – Landei