如何查看由Scala编译器为表达式等推断的类型?我有一些具有复杂类型推断和隐式转换的代码,通过阅读代码很难看到发生了什么。显示Scala表达式的推断类型
我已经尝试添加
scalacOptions in Compile += "-Xprint-types"
在build.sbt
,但这并没有影响。
直接使用scalac不是很吸引人,因为我有很多依赖关系。
我使用Eclipse Scala插件和ENSIME编写代码和SBT来构建。
如何查看由Scala编译器为表达式等推断的类型?我有一些具有复杂类型推断和隐式转换的代码,通过阅读代码很难看到发生了什么。显示Scala表达式的推断类型
我已经尝试添加
scalacOptions in Compile += "-Xprint-types"
在build.sbt
,但这并没有影响。
直接使用scalac不是很吸引人,因为我有很多依赖关系。
我使用Eclipse Scala插件和ENSIME编写代码和SBT来构建。
在Eclipse Scala IDE 3.0中添加了这个确切的功能!
选择代码的任何部分,然后按下Ctrl-Shift-W T(在Mac上用Cmd替换Ctrl)来查看推断的类型。
它需要
scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer")
代替。
不幸的是,输出不太可读。 :(
葫芦的表达到一个非本地def
或val
,没有一个明确的类型 - 那么它会出现在Eclipse大纲视图,其中分配一个推断类型
然而,这不是这是一个理想的解决方案,因为它需要一些工作,并且在涉及递归时不能使用。
我正在准备一个关于这个问题的问题,最好是我贴在这里(请不要激怒我因为这不是答案..)
我尝试了Robin Green的解决方案,但是(如你所知),它提供了比所需更多的输出。
这里所说:
作为新Scala和推断类型的机制,我觉得这往往是有益的,能够做这样的事情:
@spitType s= something
...
虚spitType
就像编译时宏(类似于C++中的#pragma warning
),它会在编译时吐出表达式的类型信息。
我知道我能够在运行时获得这样的信息,但是在其余代码尚未编译的情况下,编译时消息将是唯一有用的东西。
你会发现这样的功能有用吗,或者根本不相关?
嘿,找到了这个方法。做一个变量s.a. 'val xxx:Nothing'并将其分配给您想要知道其类型的表达式。由于没有类型从“Nothing”派生,因此总会产生错误。 :) – akauppi 2012-10-15 13:43:07