Scala - 错误:value max不是我的自定义类的成员

时间:2016-11-08 08:10:46

标签: java scala

我有自己的班级

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函数中使用它?

2 个答案:

答案 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._

现在它可以工作,但我想知道是否有更明确的解决方案,我可以依赖内置的最大和订购功能。