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看起来更干净.
我想我认为的 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)