我有一个返回double值的Java-Annotation:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface DoubleValue {
double value();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将注释附加到scala类中的字段时,值为negativ,如下所示:
class Test {
@DoubleValue(-0.05)
var a = _
}
Run Code Online (Sandbox Code Playgroud)
我得到一个编译器错误消息:"annotation参数需要是一个常量;找到:0.05.unary_-".我明白我需要一个数字文字而且我查看了Scala语言规范,似乎 - 符号仅用于指数但不用于尾数.有人知道如何使用注释将负值作为运行时信息吗?
谢谢,克林克
我正在研究一个经济模型的小型库,它使用类型来检查实体的单位,例如,而不是val apples = 2.0我们写的val apples = GoodsAmount[KG, Apples](2.0).为了创建捆绑商品,我尝试使用无形库中的HLists.这工作正常,但在某些情况下,我不能像我喜欢的那样通用代码.参见例如以下问题.
我从一个简单的代码开始,解释我想要变成什么样的形状.我们创建两个类,代表Km,其他Miles.应该允许添加Km类,但不能增加里程.我使用抽象类型T的主要动机是我们更复杂的库.对'+'函数的间接调用只是因为我们需要在无形状的情况下类似的东西.
trait Foo {
type T
val v: Double
def +[B <: Foo](other: B)(implicit ev: this.T =:= other.T) = v + other.v
}
trait _Km
trait _Miles
case class Km(v: Double) extends Foo { type T = _Km }
case class Miles(v: Double) extends Foo { type T = _Miles }
object ExampleSimple extends App {
def add[A <: Foo, B <: Foo](a: A, b: B)(implicit ev: a.T …Run Code Online (Sandbox Code Playgroud)