繁体   English   中英

在Scala中等效的Haskell标记或F#计算表达式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM