对于我的dsl,我需要一些精神:
@deprecated def foo(x: Int) = x
...仅适用于lambdas \ anonymous functions。
这样的事情可能吗?
答案 0 :(得分:1)
显然,这种语言存在于lang spec:
的语言中表达式e的注释出现在表达式e之后, 用冒号隔开。
所以这应该有效:
object TestAnnotation {
val o = Some(1)
def f = o.map(_ + 1 : @deprecated("gone", "forever"))
val e = { 1 + 2 } : @deprecated("hmm", "y")
println(f)
println(e)
}
然而,当我用scalac -deprecation
编译它时,我得不到任何警告。我打开了一个问题here并得到了一个不受支持的回复。
您可以使用的一种解决方法是单独声明lambda:
object TestAnnotation {
val o = Some(1)
@deprecated("this", "works") val deprecatedLambda: Int => Int = _ + 1
o.map(deprecatedLambda)
}
scalac
然后给出:
Annotation.scala:6: warning: value deprecatedLambda in object TestAnnotation is deprecated: this
o.map(deprecatedLambda)
^
one warning found