という名前の ScalaIDE ワークシートを作成した後、test.WsTemp
以下のコードを書きましたが、 trait の 1 行で 3 つのエラーが発生していますEnum
。
scala.math.Ordering[U]
トレイトで順序付けされたメソッドで始まる型の暗黙的な展開の発散LowPriorityOrderingImplicits
- 暗黙的
Ordering
に定義されていませんU
- メソッド sorted の十分な引数がありません:
(implicit ord: scala.math.Ordering[U])List[U]
、指定されていない値パラメータord
。
Val
明らかなextendsであるため、なぜこれが機能しないのOrdered[Val]
ですか?
object WsTemp {
trait Val extends Ordered[Val] {
val id: Int
val name: String
final def compare(that: Val) = this.id - that.id
override def toString: String = name
}
trait Enum[U <: Val] {
protected def init: Set[U]
val all = init
val allOrdered = all.toList.sorted // <-- Receiving error here
val byId = all.map(x => (x.id, x)).toMap
val byName = all.map(x => (x.name, x)).toMap
def apply(id: Int) = byId.get(id)
def apply(name: String) = byName.get(name)
}
sealed class Value(val id: Int, val name: String) extends Val
object Suit extends Enum[Value] {
override def init: Set[Value] = //Set()
Set(
new Value(0, "Spade")
, new Value(1, "Club")
, new Value(2, "Diamond")
, new Value(3, "Heart")
)
val Spade = Suit.byId(0)
val Club = Suit.byId(1)
val Diamond = Suit.byId(2)
val Heart = Suit.byId(3)
}
val all = Suit.all
val allOrdered = Suit.allOrdered
val byId = Suit.byId
val byName = Suit.byName
val spade = Suit.Spade
}