【问题标题】:Insert inferred type annotation for Scala val/var/def为 Scala val/var/def 插入推断类型注释
【发布时间】:2013-04-25 06:56:08
【问题描述】:

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

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

脚注:

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

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

【问题讨论】:

  • 我相信 IntelliJ IDEA 确实有“插入推断类型”重构。

标签: scala types code-generation type-inference


【解决方案1】:

这在 Kepler Eclipse 4.3 更新的 Scala IDE 中有 been implemented

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

here

【讨论】:

  • intelliJ 中的任何等价物?
【解决方案2】:

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

⌥ (Alt) + return

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      foo(arg1) must be equalTo Success
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          谁有更好的办法?

          【讨论】:

            【解决方案7】:

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

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

            然后,当您选择一个(变量或函数)定义并按 Alt+[Enter] 时,它会询问您是否要插入推断的类型 - 按 [回车] 即可。

            我知道这是 2 次击键,但它仍然比选择、复制和粘贴要好。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-05-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多