我有自己的班级
Requirement already satisfied: psutil in /Library/Python/2.7/site-packages
由MyCustomClass组成,它是带有以下签名的java enum:
class Foo {
MyCustomClass value;
...
}
我将其定义为:
enum MyCustomClass{
ONE(1),
TWO(2),
THREE(3)
private int nominal;
MyCustomClass(int nominal) {
this.nominal = nominal;
}
public int nominal() {
return nominal;
}
}
然后我可以使用函数max来处理MyCustomClass类型的对象序列。但是我在reduceOption函数中尝试使用max fucntion时遇到错误
implicit val myCustomClassOrdering = new Ordering[Foo] {
override def compare(c1: Foo, c2:Foo): Int = {
c1.value.nominal.compareTo(c2.value.nominal)
}
}
import myCustomClassOrdering ._
收到错误消息:val l = List[Foo](...)
l.reduceOption(_ max _)
我应该怎样做才能在value max is not a member of ...
reduceOption
函数中使用它?
答案 0 :(得分:0)
为MyCustomClass委派的max方法。要么为Foo添加排序,要么根据MyCustomClass值上的max方法调用结果添加另一个返回Foo对象的方法。
def op(x: Foo,y: Foo):Foo = {
if( (x.value max y.value) == x.value) x
else y
}
val b = l.reduceOption( op(_,_) )
答案 1 :(得分:0)
object FooExtension {
implicit class RichFoo(c:Foo) {
def max(c2:Foo) = {
if(c.value.nominal > c2.value.nominal) c else c2
}
}
}
import FooExtension._
现在它可以工作,但我想知道是否有更明确的解决方案,我可以依赖内置的最大和订购功能。