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 "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)。
答案 0 :(得分:4)
缺少的部分可能是使用=
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
d = b * c // 6 * 4 = 24
} yield d
val result = f.get
明智地混合使用<-
和=
,您应该拥有所需的所有灵活性。
答案 1 :(得分:-2)
似乎scala中没有这样的语法,我们需要使用编译器插件架构来实现它。