小编Kli*_*nke的帖子

我可以在Scala中作为常量表达式使用负值吗?

我有一个返回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语言规范,似乎 - 符号仅用于指数但不用于尾数.有人知道如何使用注释将负值作为运行时信息吗?

谢谢,克林克

annotations scala constant-expression

11
推荐指数
1
解决办法
1112
查看次数

无形:检查多态函数的类型约束

我正在研究一个经济模型的小型库,它使用类型来检查实体的单位,例如,而不是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)

scala hlist shapeless

7
推荐指数
1
解决办法
725
查看次数