获取Scala的设计部分用于/理解表达式?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

有没有人知道在实际尝试在REPL(或编译器)中编译之前,如何获得(Scala部分)des / for / comprehension表达式的翻译?

到目前为止我发现的唯一的东西是编译器“-print”标志,但它给了你完整的Scala翻译

提问于
用户回答回答于

它似乎没有任何可能性直接在REPL中解除“for / comprehension”表达式。但作为替代方案,可以使用一些Scala编译器选项,如“-print”或简单表达式“Xprint:typer -e”

例:

要从文件中获得desugard输出,请使用“-print”标志:

# scala -print file.scala

要解析一个简单的单行表达式,请使用“-Xprint:typer -e”标志:

# scala -Xprint:typer -e "for (i <- 0 to 100) yield i"
用户回答回答于

scalac -print输出scala代码,而不是java。它将所有不与java直接兼容的scala关键字转换为正常的scala代码。不可能让编译器只翻译部分afaik。但基本上,理解总是以相同的方式翻译。

一个简单的/像这样输出

for(x <- List(1,2,3)) yield x*x

将被翻译成

List(1,2,3).map {x => x*x}

for(x <- List(1,2,3)) println(x)

List(1,2,3).foreach{x => println(x)}

嵌套的fors将被转换为嵌套的flatMap / map结构

for(x <- List(1,2,3); y <- List(4,5,6)) yield x*y

将被翻译成

List(1,2,3).flatMap { x =>
  List(4,5,6).map { y =>
    x*y
  }
}

扫码关注云+社区