如果没有给出变量的类型,我如何确定?

Joh*_*ood 6 types scala

假设,我们有类似的东西:

val x = "foo".charAt(0)
Run Code Online (Sandbox Code Playgroud)

让我们进一步假设,我们不知道方法的返回类型charAt(0)(当然,在Scala API中描述).有没有办法,我们可以找出变量x在定义之后和未明确声明时的类型?

更新1: 我最初的问题不够精确:我想知道(出于调试原因)变量的类型.也许有一些编译器选项可以看看Scala的类型推断声明了什么类型的变量?

Tra*_*own 7

假设您在名为的源文件中包含以下内容Something.scala:

object Something {
  val x = "foo".charAt(0)
}
Run Code Online (Sandbox Code Playgroud)

您可以使用-Xprint:typer编译器标志在编译器typer阶段之后查看程序:

$ scalac -Xprint:typer Something.scala
[[syntax trees at end of typer]]// Scala source: Something.scala
package <empty> {
  final object Something extends java.lang.Object with ScalaObject {
    def this(): object Something = {
      Something.super.this();
      ()
    };
    private[this] val x: Char = "foo".charAt(0);
    <stable> <accessor> def x: Char = Something.this.x
  }
}
Run Code Online (Sandbox Code Playgroud)

你也可以:type在REPL中使用:

scala> :type "foo".charAt(0)
Char

scala> :type "foo".charAt _
Int => Char
Run Code Online (Sandbox Code Playgroud)

正如Luigi Plinge在上面的评论中指出的那样,您的IDE也可以提供更好的方式来获取这些信息.