2012-02-10 39 views
8

如何查看由Scala编译器为表达式等推断的类型?我有一些具有复杂类型推断和隐式转换的代码,通过阅读代码很难看到发生了什么。显示Scala表达式的推断类型

我已经尝试添加

scalacOptions in Compile += "-Xprint-types" 
在build.sbt

,但这并没有影响。

直接使用scalac不是很吸引人,因为我有很多依赖关系。

我使用Eclipse Scala插件和ENSIME编写代码和SBT来构建。

回答

2

在Eclipse Scala IDE 3.0中添加了这个确切的功能!

选择代码的任何部分,然后按下Ctrl-Shift-W T(在Mac上用Cmd替换Ctrl)来查看推断的类型。

4

它需要

scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer") 

代替。

不幸的是,输出不太可读。 :(

0

葫芦的表达到一个非本地defval,没有一个明确的类型 - 那么它会出现在Eclipse大纲视图,其中分配一个推断类型

然而,这不是这是一个理想的解决方案,因为它需要一些工作,并且在涉及递归时不能使用。

0

我正在准备一个关于这个问题的问题,最好是我贴在这里(请不要激怒我因为这不是答案..)

我尝试了Robin Green的解决方案,但是(如你所知),它提供了比所需更多的输出。

这里所说:

作为新Scala和推断类型的机制,我觉得这往往是有益的,能够做这样的事情:

@spitType s= something 
... 

spitType就像编译时宏(类似于C++中的#pragma warning),它会在编译时吐出表达式的类型信息。

我知道我能够在运行时获得这样的信息,但是在其余代码尚未编译的情况下,编译时消息将是唯一有用的东西。

你会发现这样的功能有用吗,或者根本不相关?

+1

嘿,找到了这个方法。做一个变量s.a. 'val xxx:Nothing'并将其分配给您想要知道其类型的表达式。由于没有类型从“Nothing”派生,因此总会产生错误。 :) – akauppi 2012-10-15 13:43:07