John Threepwood John Threepwood - 1 month ago 7
Scala Question

How can I determine the type of a variable when it is not given?

Assume, we have something like:

val x = "foo".charAt(0)


and let us further assume, we do not know the return type of the method
charAt(0)
(which is, of course, described in the Scala API). Is there a way, we can find out, which type the variable
x
has after its definition and when it is not declared explicitly?

UPDATE 1:
My initial question was not precise enough: I would like to know (for debugging reasons) what type the variable has. Maybe there is some compiler option to see what type the variable get declared to by Scala's type inference ?

Answer

Suppose you have the following in a source file named Something.scala:

object Something {
  val x = "foo".charAt(0)
}

You can use the -Xprint:typer compiler flag to see the program after the compiler's typer phase:

$ 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
  }
}

You could also use :type in the REPL:

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

scala> :type "foo".charAt _
Int => Char

Your IDE may also provide a nicer way to get this information, as Luigi Plinge points out in a comment above.