Reputation: 16143
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 ?
Upvotes: 6
Views: 5979
Reputation: 33036
If you are using IntelliJIDEA, to show Type Info action in Editor, navigate to the value and press Alt
+ =
for Windows and Ctrl
+ Shift
+ P
for Mac:
I find it very handy when writing code.
Upvotes: 2
Reputation: 297175
Here's an easier version of Travis first alternative:
dcs@dcs-132-CK-NF79:~/tmp$ scala -Xprint:typer -e '"foo".charAt(0)'
[[syntax trees at end of typer]] // scalacmd8174377981814677527.scala
package <empty> {
object Main extends scala.AnyRef {
def <init>(): Main.type = {
Main.super.<init>();
()
};
def main(argv: Array[String]): Unit = {
val args: Array[String] = argv;
{
final class $anon extends scala.AnyRef {
def <init>(): anonymous class $anon = {
$anon.super.<init>();
()
};
"foo".charAt(0)
};
{
new $anon();
()
}
}
}
}
}
Upvotes: 3
Reputation: 139038
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.
Upvotes: 7