Scala 枚举比较顺序
Scala Enumeration Compare Order
object CardNum extends Enumeration
{
type CardNum = Value;
val THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE,
TEN, JACK, QUEEN, KING, ACE, TWO = Value
}
上面显示了我的枚举。我想比较枚举的顺序,例如检查它是否遵循我的枚举中定义的顺序。我尝试使用 compareTo() 方法,但它只会 return -1、0 或 1 的值。与 Java 不同的是 return 枚举之间的距离。例如我使用了这段代码。
1 - println(CardNum.FIVE.compareTo(CardNum.EIGHT))
2 - println(CardNum.SEVEN.compareTo(CardNum.EIGHT))
句子1和句子2都给了我相同的结果-1,这让我无法检测用户是否遵循枚举的顺序。在 Java 中不会有问题,因为句子 1 会给我结果 -3 和句子 2 -1。在 Scala 中有这样做的方法吗?对不起,我在 Scala 方面经验不足。
您可以使用元素 id
s:
之间的差异
scala> CardNum.FIVE.id - CardNum.EIGHT.id
res1: Int = -3
scala> CardNum.SEVEN.id - CardNum.EIGHT.id
res2: Int = -1
您应该包括 Kolmar 描述的逻辑以了解枚举内两张卡片之间的距离或使用隐式 class,这样可以更简单地在代码中搜索引用并在透明中进行更改方式(例如,这将允许您更改枚举顺序)
枚举里面
object CardNum extends Enumeration {
protected case class CardVal() extends super.Val {
def distance(that: CardVal) = this.id - that.id
}
type CardNum = Val;
val THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE,
TEN, JACK, QUEEN, KING, ACE, TWO = CardVal()
}
使用隐式 class
implicit class EnhancedCard(card: CardNum.CardNum) {
def distance(that: CardNum.CardNum): Int = card.id - that.id
}
使用此解决方案,您需要在范围内包含隐式 class。
object CardNum extends Enumeration
{
type CardNum = Value;
val THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE,
TEN, JACK, QUEEN, KING, ACE, TWO = Value
}
上面显示了我的枚举。我想比较枚举的顺序,例如检查它是否遵循我的枚举中定义的顺序。我尝试使用 compareTo() 方法,但它只会 return -1、0 或 1 的值。与 Java 不同的是 return 枚举之间的距离。例如我使用了这段代码。
1 - println(CardNum.FIVE.compareTo(CardNum.EIGHT))
2 - println(CardNum.SEVEN.compareTo(CardNum.EIGHT))
句子1和句子2都给了我相同的结果-1,这让我无法检测用户是否遵循枚举的顺序。在 Java 中不会有问题,因为句子 1 会给我结果 -3 和句子 2 -1。在 Scala 中有这样做的方法吗?对不起,我在 Scala 方面经验不足。
您可以使用元素 id
s:
scala> CardNum.FIVE.id - CardNum.EIGHT.id
res1: Int = -3
scala> CardNum.SEVEN.id - CardNum.EIGHT.id
res2: Int = -1
您应该包括 Kolmar 描述的逻辑以了解枚举内两张卡片之间的距离或使用隐式 class,这样可以更简单地在代码中搜索引用并在透明中进行更改方式(例如,这将允许您更改枚举顺序)
枚举里面
object CardNum extends Enumeration {
protected case class CardVal() extends super.Val {
def distance(that: CardVal) = this.id - that.id
}
type CardNum = Val;
val THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE,
TEN, JACK, QUEEN, KING, ACE, TWO = CardVal()
}
使用隐式 class
implicit class EnhancedCard(card: CardNum.CardNum) {
def distance(that: CardNum.CardNum): Int = card.id - that.id
}
使用此解决方案,您需要在范围内包含隐式 class。