小编mop*_*pot的帖子

Scala @tailrec带折叠

scala的@tailrec注释是否支持Option.fold方法?

@tailrec
def test(a: Int): Int =
  if (a > 10)
    Option(true).fold(test(a - 1))(_ => test(a - 2))
  else
    -1
Run Code Online (Sandbox Code Playgroud)

此代码导致错误:

无法优化@tailrec带注释的方法测试:它包含一个不在尾部位置的递归调用

这个问题可以通过模式匹配来解决,但我觉得fold看起来更干净.

recursion scala fold

1
推荐指数
1
解决办法
693
查看次数

为什么 for-comprehension 扩展为 map+foreach 而不是嵌套的 foreach?

我想我认为的 for-comprehension 是“为每个 'a' 创建 'x',然后为每个 'b' 对所有变量做一些事情”

for {
    a <- Seq(1, 2, 3)
    x = "test" + a
    b <- Seq(4, 5, 6)
} {
    ...
}
Run Code Online (Sandbox Code Playgroud)

应该扩展到

Seq(1, 2, 3).foreach { a =>
    val x = "test" + a
    Seq(4, 5, 6).foreach { b =>
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是检查-Xprint:parser显示它扩展到

Seq(1, 2, 3).map { a =>
    val x = "test" + a
    (a, x)
}.foreach { case (a, x) =>
    Seq(4, 5, 6).foreach { b => …
Run Code Online (Sandbox Code Playgroud)

foreach scala for-comprehension

0
推荐指数
1
解决办法
71
查看次数

标签 统计

scala ×2

fold ×1

for-comprehension ×1

foreach ×1

recursion ×1