哪些Scala注解可以修改编译器的信息?

17

我知道两种方式:

  • @deprecated("use blabla instead")被用来为编译器在客户端代码中使用带有注释定义时输出的警告添加说明。
  • @implicitNotFound(msg = "more meaningful explanation") 被用于在无法找到类型与注释定义相同的隐式值时输出额外的错误信息。对于 CanBuildFrom,msg 可以包含占位符 ${A},如果 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 我赞同这个提议... - Kevin Wright
嗯,这是一个很好的问题,我已经点赞了,但实际上很难有一个可接受的答案,除非Scala团队中的某个人加入讨论。 - Dave Griffith
3个回答

6

有一个@migration,与-Xmigration一起使用,用于指示方法在不同版本之间的语义变化,以帮助在不同版本之间移植代码。

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

6

有一个@tailrec注解,如果不能将尾调用优化应用于已注释的方法,则使编译器输出错误。


3

从Scala 2.9版本开始,还有@deprecatedName:这是一个注解,用于指定应用于其上的参数名称已被弃用。在命名参数中使用该名称会生成一个弃用警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接