4

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

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

脚注:

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

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

4

7 回答 7

2

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

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

这里

于 2014-08-26T23:23:15.633 回答
2

对于那些在 Mac 上使用 IDEA 的人,以下工作:

⌥ (Alt) + return

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

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

于 2015-12-15T16:47:01.550 回答
1

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

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

foo(arg1) must be equalTo Success
于 2013-05-01T13:47:39.723 回答
1

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

于 2013-05-01T10:10:14.603 回答
1

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

于 2013-05-01T14:02:36.370 回答
0

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

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

有没有人有更好的方法?

于 2013-05-01T09:02:15.130 回答
0

Using IDEA Intellij 15: File menu > Settings > Editor > Intentions

Minimize the Intentions and select Scala > Type and make sure that "Toggle Type Annotation" is checked.

Then when you select a (variable or function) definition and hit Alt+[Enter] it asks you if you want to insert the inferred type - hit [carriage-return] to do so.

I know that's 2 key-strokes, but it's still better than selecting, copying and pasting.

于 2016-02-11T11:38:44.880 回答