[英]Equivalent of Haskell do-notation or F# Computation Expressions in Scala?
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
但它确实感觉不对。 有更好的语法吗?
例如,你可以拥有哈斯克尔
main = do fromHandle <- getAndOpenFile "Copy from: " ReadMode toHandle <- getAndOpenFile "Copy to: " WriteMode contents <- hGetContents fromHandle hPutStr toHandle contents hClose toHandle putStr "Done."
这与scala不同,看起来不像是一个foreach循环。 Scala语法似乎与List comprehension有太强的耦合,这是一个独特的概念。 这阻止我编写看起来并不奇怪的内部DSL(monad)。
缺少的部分可能是使用=
是scala的for -reherehension:
val f = for {
a <- Future(10 / 2) // 10 / 2 = 5
b <- Future(a + 1) // 5 + 1 = 6
c <- Future(a - 1) // 5 - 1 = 4
d = b * c // 6 * 4 = 24
} yield d
val result = f.get
通过明智地混合<-
和=
,您应该具备所需的所有灵活性。
似乎scala中没有这样的语法,我们需要使用编译器插件架构自己实现它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.