Scala 使用泛型类型的curry函数

Scala 使用泛型类型的curry函数,scala,Scala,我正在尝试将curry函数用于类型化类。我的目标是扩展该类的类只需定义curried函数。这是我最后一次失败的尝试: abstract class Foo[T: Ordering]{ def eval(x: T, y: T)(f:(T,T)=>Option[Boolean])(implicit ev:Ordering[T] = null): Option[Boolean] = { if(ev == null) None else

我正在尝试将curry函数用于类型化类。我的目标是扩展该类的类只需定义curried函数。这是我最后一次失败的尝试:

  abstract class Foo[T: Ordering]{
    def eval(x: T, y: T)(f:(T,T)=>Option[Boolean])(implicit ev:Ordering[T] = null): Option[Boolean] = {
      if(ev == null)
          None
        else
          f(x,y)
    }
  }
  case object Bar extends Foo{
    def xx[T: Ordering] = (x:T,y:T)=>Some(x>y)
    eval(xx)
  }

应该如何正确地完成它?

我认为你不能像这样很好地编码它。@Daenyth好吧,它能工作。。。找不到更好的方法在向服务器发送未知对象时返回nonemethod@igx您不应该向隐式参数添加默认值:这非常危险。如果作用域中没有隐式参数,编译器应该抱怨,而不想为
ev
提供值的客户端应该明确地这样做。另外:我不完全理解你想要实现什么。为什么不将
f
设为
Foo
的未实现受保护成员?@KuluLimpa我之所以给出默认值,是因为我希望在有人向eval方法发送无效值时不返回任何值。因此,如果有人发送类似于这个eval(Bar,2)的内容,该方法将返回None(其中Bar可以是任何类似case-object-Bar的内容)。有没有其他方法可以实现这一点?@igx然而,
eval(Bar,2)
只有在选择
T
作为
any
时才被静态禁止,而这只能在范围内的
any
上存在隐式排序的情况下执行(因为
Foo
上的通用参数)这意味着整个
隐式ev:Ordering[T]=null不需要,这反过来意味着
eval(x:T,y:T)(f:(T,T)=>选项[Boolean])=f(x,y)
,使得
eval
仅仅是
f
的别名。你能给出你想要应用
eval
的上下文吗,因为即使试图得到
eval(Bar,2)
的结果对我来说也没有意义——它不应该编译。