value-class

    1热度

    2回答

    value classes可用于实现类型安全而不需要拆箱。 我的印象是,在运行时这些类型/类将“不存在”,被视为简单类型(例如,在运行时,值类case class X(i: Int) extends AnyVal将是简单的Int)。 但是,如果你调用一个值类实例的方法.toString它会打印出类似这样: scala> val myValueClass = X(3) myValueClass:

    1热度

    1回答

    我试图实现一个不占用额外内存的选项。 我创建了一个类。空值表示无,非空值表示某些。 class Maybe[+T](private val nullable: T) extends AnyVal { @inline final def isDefined: Boolean = { println("isDefined called") val res = nullab

    1热度

    1回答

    我已经定义了下面的类层次结构,我要限制的类型参数是舒适与Double ... sealed abstract class Quantity[-T](value: T)(implicit ev: T <:< Double) case class DiscreteQuantity(value: Long) extends Quantity[Long](value) case class Con

    5热度

    1回答

    我正在反思地调用一个方法,它的参数可能是也可能不是value class的一个实例。由于值类的目的是为了避免对基础值进行装箱,如果参数类型是值类,那么所讨论的方法实际上会期望取消装箱值。为了处理这种情况,我试图从值类中展开底层的值。我首先需要确定参数是一个值类的,在这里我碰到的第一个拦路虎: def isObjectOfValueClass(arg: Any) = classOf[Any

    2热度

    1回答

    我试图嘲笑一种方法,返回一个值类的实例(extends AnyVal) 我收到了一些奇怪的错误消息,我明白(因为值类删除),但我很惊讶Mockito没有应付那个。 我的类: case class MyValueClass(value: String) extends AnyVal 我想嘲笑功能: trait ToMock { def something(someParams: Str

    1热度

    2回答

    我在我的项目中有代表ID的对象。 假设它是ChairId,TableId,LampId。我希望他们都从GenericId继承。我希望能够致电def f(x: GenericId) = x.id 我希望他们只持有单一的id: String,所以我想让他们扩展AnyVal。 此外,我想为每种类型提供功能generate这将产生我具体的ID即我想喜欢的类型的东西ChairId.generate() 我键

    1热度

    1回答

    我有一个值类(位置),其中有两个双打(x和y)。 我也有一艘班级船只,它有一个带有位置物体的属性。 我需要能够做一个查找,如:在(5,7)与船持续时间。 我也希望能够更改位置对象的值,因为多个船舶可以引用相同的位置对象,并且当位置对象更改时它们都必须一起移动。我已经看过hashmap,但能够在新的位置获取船舶(5,7)我需要重写位置对象的哈希码(以便具有相同值的位置具有相同的哈希),我听说你不应该

    1热度

    1回答

    我无法看到值类和枚举之间的区别。如果有人能告诉我他们之间的区别以及他们使用的区别是什么,那将是非常棒的。

    2热度

    1回答

    我在Scala 2.10.3中使用值类(扩展AnyVal的类),但在将它们用作抽象方法的参数时遇到了一个奇怪的编译器错误。 如下面的例子演示了: class ValueClass(val x: Int) extends AnyVal trait Test { def foo(v: ValueClass): Int } new Test { override def f

    2热度

    3回答

    我知道在编译时内嵌在scala中的value class。 也许这样 case class A(i: Int) extends AnyVal { def +(that: A) = A(this.i + that.i) } A(1) + A(2) // After compile it equals to 1 + 2 ,但它似乎不是什么大不了的事给我。 它可能提高性能,但是, 调用