小编Ton*_*hen的帖子

无法将具有特殊特征的Scala方法专门用作返回类型

trait Eq[@specialized -X] {
  def eq(x: X, y: X): Boolean
}

trait Keyed[@specialized(Int) X] {
  def eqOnKey: Eq[X]
}
Run Code Online (Sandbox Code Playgroud)

该方法eqOnKey不专门用于生成的类Keyed$mcI$sp.

我如何专门化这个方法,即eqOnKey$mcI$sp在类中使返回类型的方法Keyed$mcI$sp成为Eq$mcI$sp

scala specialization

10
推荐指数
1
解决办法
182
查看次数

逆变型的方法继承

我定义了两个类型类:

trait WeakOrder[-X] { self =>
  def cmp(x: X, y: X): Int
  def max[Y <: X](x: Y, y: Y): Y = if (cmp(x, y) >= 0) x else y
  def min[Y <: X](x: Y, y: Y): Y = if (cmp(x, y) <= 0) x else y
}

trait Lattice[X] { self =>
  def sup(x: X, y: X): X
  def inf(x: X, y: X): X
}
Run Code Online (Sandbox Code Playgroud)

我想做以下事情:

trait TotalOrder[-X] extends Lattice[X] with WeakOrder[X] { self =>
  def sup(x: X, y: X): …
Run Code Online (Sandbox Code Playgroud)

scala contravariance typeclass

5
推荐指数
1
解决办法
120
查看次数

标签 统计

scala ×2

contravariance ×1

specialization ×1

typeclass ×1