gpt4 book ai didi

scala - 如何比较泛型枚举值?

转载 作者:行者123 更新时间:2023-12-02 06:27:09 26 4
gpt4 key购买 nike

我正在尝试为 Scala Enumeration 值编写一个通用的 max 方法。我有

def enumMax[E <: Enumeration, V <: E#Value](v1: V, v2: V): V = v1.compare(v2) match {
case x if x > 0 => v1
case x if x < 0 => v2
case _ => v1
}

但我收到了相当神秘的错误消息

[error] overloaded method value compare with alternatives:
[error] ((that: _1.Value)Int) forSome { val _1: E } <and>
[error] (that: _1.Value)Int
[error] cannot be applied to (V)
[error] def enumMax[E <: Enumeration, V <: E#Value](v1: V, v2: V): V = v1.compare(v2) match {
[error] ^

有人知道这里发生了什么吗?有没有更好的方法来完成这个?谢谢。

相关问题:Deriving a Cats Order for Scala's Enumeration

最佳答案

添加上下文绑定(bind)Ordering就足够了

def enumMax[E <: Enumeration, V <: E#Value : Ordering](v1: V, v2: V): V = v1.compare(v2) match {
case x if x > 0 => v1
case x if x < 0 => v2
case _ => v1
}

只是编译器报错,不清楚。


尝试

def enumMax(e: Enumeration)(v1: e.Value, v2: e.Value): e.Value = v1.compare(v2) match {
case x if x > 0 => v1
case x if x < 0 => v2
case _ => v1
}

关于scala - 如何比较泛型枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com