Không phải là Martin Odersky , Tôi chỉ có thể đoán :-) Nhìn vào Scaladoc của foreach
, tôi thấy điều này:
/** Applies a function `f` to all elements of this $coll.
*
* @param f the function that is applied for its side-effect to every element.
* The result of function `f` is discarded.
*
* @tparam U the type parameter describing the result of function `f`.
* This result will always be ignored. Typically `U` is `Unit`,
* but this is not necessary.
*
* @usecase def foreach(f: A => Unit): Unit
*/
Vì vậy, loại trả về f
không quan trọng và kết quả của nó luôn bị hủy. Điều này, với tôi, gợi ý rằng việc sử dụng một tham số kiểu chung ở đây để đánh dấu kiểu trả về chỉ là một tài liệu nhỏ, nói rằng "kiểu trả về có thể là bất cứ thứ gì, thực sự bất cứ điều gì, bạn thích". Trong khi một kiểu trả về của Any
có thể gợi ý cho (một số) độc giả một số loại hạn chế đối với các loại hàm áp dụng ở đây.
Một khía cạnh khác là Scala đã được thiết kế rất có ý thức để trở thành chung từ đầu. Vì vậy, với tôi - sử dụng một tham số kiểu chung ở đây phù hợp với triết lý chung của ngôn ngữ, trong khi sử dụng Any
- mặc dù về mặt kỹ thuật có thể sử dụng - sẽ là một cách tiếp cận hoàn toàn không chung chung với tỷ lệ phần còn lại của ngôn ngữ.
Nguồn
2012-12-30 21:19:58
Tôi không có thời gian để đưa ra một ví dụ, nhưng tôi mạnh mẽ nghi ngờ nó là để cho các inferencer loại bỏ qua 'foreach' khi nói đến suy ra kiểu trả về của một hàm. Nhưng tôi không biết một trường hợp nào trên đỉnh đầu của tôi, nơi nó sẽ quan trọng (nghĩa là 'Bất kỳ' sẽ không dẫn đến suy luận tương tự). –