Tại sao câu lệnh trả về rõ ràng (một từ sử dụng từ khóa return
) trong hàm trả về ẩn danh từ hàm được đặt tên kèm theo chứ không chỉ từ chính hàm ẩn danh?Tuyên bố trả về Scala trong các hàm ẩn danh
Ví dụ: kết quả chương trình sau đây trong một lỗi type:
def foo: String = {
((x: Integer) => return x)
"foo"
}
Tôi biết nó được đề nghị để tránh những từ khóa return
, nhưng tôi quan tâm đến lý do tại sao các báo cáo lợi nhuận ngầm và rõ ràng có một ngữ nghĩa khác nhau trong các chức năng ẩn danh.
Trong ví dụ sau, câu lệnh trả về "tồn tại" sau m
đã hoàn tất việc thực thi và chương trình dẫn đến ngoại lệ trong thời gian chạy. Nếu các hàm ẩn danh không trả về từ hàm kèm theo, nó sẽ không thể biên dịch mã đó.
def main(args: Array[String]) {
m(3)
}
def m: (Integer => Unit) =
(x: Integer) => return (y: Integer) => 2
Bạn có một số ví dụ nghiêm túc hơn về lý do tại sao sự khác biệt trong ngữ nghĩa là cần thiết? Bởi vì những gì bạn đã liệt kê có thể dễ dàng được mô phỏng với một 'foreach' đã sửa đổi có tham số biến vị ngữ. – corazza