F# 计算表达式允许将一元语法的复杂性隐藏在一层厚厚的语法糖后面。Scala中有类似的东西吗?
我觉得是为了理解...
例子:
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
但是感觉真的不太对。有更好的语法吗?
例如在haskell中你会有
main = do fromHandle <- getAndOpenFile "复制自:" ReadMode toHandle <- getAndOpenFile "复制到:" WriteMode 内容 <- hGetContents fromHandle hPutStr toHandle 内容 h关闭手柄 putStr "完成。"
这与 scala 不同,它看起来不像 foreach 循环。Scala 语法似乎与列表理解有很强的耦合,这是一个独特的概念。这使我无法编写看起来并不奇怪的内部 DSL (monad)。