【问题标题】:What Scala annotations modify the compiler's messages?哪些 Scala 注释修改了编译器的消息?
【发布时间】:2010-12-10 15:35:27
【问题描述】:

我知道两个:

  • @deprecated("use blabla instead") 用于在客户端代码中使用带注释的定义时,对编译器输出的警告添加解释。
  • @implicitNotFound(msg = "more meaningful explanation") 用于在无法找到带注释定义的隐式类型时输出附加错误消息。查看CanBuildFrom,如果A是注解类型的类型参数的名称,则msg可以包含${A}类型的占位符,由编译器使用实际预期类型填充,例如:

    @implicitNotFound(msg = "Cannot construct a collection of type ${To} with elements of type ${Elem} based on a collection of type ${To}.")
    trait CanBuildFrom[-From, -Elem, +To] { ... }
    

还有其他这样的注释吗?

【问题讨论】:

  • @Daniel 我会支持那个动议...
  • 嗯,一个很好的问题,我投了赞成票,但实际上不太可能有一个可以接受的答案,除非 Scala 团队中的某个人插话。

标签: scala annotations compiler-errors compiler-warnings


【解决方案1】:

@migration,与-Xmigration一起使用,表示方法从一个版本到另一个版本的语义变化,有助于版本之间的代码移植。

@migration(2, 8, "As of 2.8, keys returns Iterable[A] rather than Iterator[A].")

【讨论】:

    【解决方案2】:

    有@tailrec,如果不能对注解的方法应用尾调用优化,编译器会输出错误。

    【讨论】:

      【解决方案3】:

      从 Scala 2.9 开始,还有 @deprecatedName:“一个注解,它指定应用它的参数的名称已弃用。在命名参数中使用该名称会生成弃用警告。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-25
        • 2016-03-10
        • 2016-03-14
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多