Biểu thức tính toán F # cho phép ẩn sự phức tạp của cú pháp đơn thuần sau một lớp đường cú pháp dày. Có cái gì đó tương tự có sẵn trong Scala?Tương đương với Haskell do-notation hoặc F # Computation Expressions trong Scala?
Tôi nghĩ rằng đó là cho comprehensions ...
Ví dụ:
val f = for {
a <- Future(10/2) // 10/2 = 5
b <- Future(a + 1) // 5 + 1 = 6
c <- Future(a - 1) // 5 - 1 = 4
} yield b * c // 6 * 4 = 24
val result = f.get
Nhưng nó không thực sự cảm thấy đúng. Có cú pháp tốt hơn không?
cho dụ trong Haskell bạn sẽ phải
main = do fromHandle <- getAndOpenFile "Copy from: " ReadMode toHandle <- getAndOpenFile "Copy to: " WriteMode contents <- hGetContents fromHandle hPutStr toHandle contents hClose toHandle putStr "Done."
này không giống như scala không giống như một vòng lặp foreach. Cú pháp Scala dường như có liên kết quá mạnh với Danh sách hiểu là một khái niệm khác biệt. Mà ngăn tôi viết nội bộ DSL (monad) mà không nhìn lạ.
'for' comprehensions là chính xác. Họ desugar để 'map' và' flatMap' đằng sau hậu trường, đó là chính xác như thế nào Haskell 'do' ký hiệu hoạt động (ngoại trừ những phương pháp được gọi là' fmap' và '>> =' trong Haskell). –
@pelotom Tôi rất muốn xem câu trả lời giải thích thêm một chút về điều đó. –
@Dan Burton - Câu hỏi này đã được hỏi và trả lời nhiều lần ... Tôi sẽ giới thiệu cho bạn câu trả lời tuyệt vời này: http://stackoverflow.com/questions/1052476/can-someone-explain-scalas-yield/1059501 # 1059501 –