繁体   English   中英

为Scala val / var / def插入推断类型注释

[英]Insert inferred type annotation for Scala val/var/def

目前,我在我的Scala类,特征和对象[1]中输入公共valvardef的类型注释 - 通过在心理上推断它们的类型,或偶尔通过将鼠标悬停在Eclipse中的标识符来找出表示编译器认为类型应该是什么[2]。 如何自动添加这些类型注释?

添加显式类型的目的是“锁定”模板的公共成员的类型,这样如果开发人员将来以导致不兼容类型的方式更改成员的定义,他们将获得编译时错误,除非他们故意更改类型注释。

脚注:

[1]除非它们覆盖超类型中的成员,并且类型应该与被覆盖成员的类型相同,这通常是我的代码中的覆盖的情况。

[2]这并不总是正确的; 当涉及覆盖超类型成员的成员时,表示编译器似乎很弱。

这已在Kepler Eclipse 4.3更新的Scala IDE中实现

在标识符上使用ctrl / cmd-1,然后选择“添加显式类型...”。

看到这里

对于在Mac上使用IDEA的用户,以下作品:

⌥ (Alt) + return

也就是说,按住Alt并按回车键/回车键。

然后选择“向值定义添加类型注释”。

有一个功能请求快速修复在声明中插入推断类型( scala-ide#1433 ),但尚未有任何贡献。

这不是您问题的直接解决方案,但如果您对这些函数进行单元测试,那么您的测试将“强制”返回类型,并在有人更改返回类型时中断。

例如,在specs2中它可能看起来像:

foo(arg1) must be equalTo Success

另一个部分解决方案是scalastyle SBT插件( http://www.scalastyle.org/rules-0.2.0.html ),它可以向您发出有关推断类型的公共成员的警告。

在Eclipse中:将鼠标悬停在标识符上,单击以展开悬停,三击以选择全部,按Ctrl + C(或Cmd + C)进行复制,单击代码以删除悬停,单击返回您所在的位置,Ctrl + V粘贴,然后最后删除所有错误/过度冗长/冗余的东西。

输入正确的类型可能会更快。

有没有人有更好的方法?

使用IDEA Intellij 15:文件菜单>设置>编辑器>意图

最小化意图并选择Scala> Type并确保选中“Toggle Type Annotation”。

然后,当您选择(变量或函数)定义并按Alt + [Enter]时,它会询问您是否要插入推断类型 - 点击[回车]来执行此操作。

我知道这是两个击键,但它仍然比选择,复制和粘贴更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM