gpt4 book ai didi

scala - 如何使用 > <<= >= 作为函数?

转载 作者:行者123 更新时间:2023-12-04 15:04:26 24 4
gpt4 key购买 nike

我需要定义一些案例类,如下所示:

case class Gt(key: String, value: Any) extends Expression {
def evalute[V, E](f: String => Any) = {
def compare(v: Any): Boolean = {
v match {
case x: Number => x.doubleValue > value.asInstanceOf[Number].doubleValue
case x: Array[_] => x.forall(a => compare(a))
case x => x.toString > value.toString
}
}
compare(f(key))
}
}

我不喜欢重复 > < >= 和 <=

我也试过这个:
trait Expression {
def evalute[V, E](f: String => Any) = true

def compare(v: Any, value: Any, cp: (Ordered[_], Ordered[_]) => Boolean): Boolean = {
v match {
case x: Number => cp(x.doubleValue, value.asInstanceOf[Number].doubleValue)
case x: Array[_] => x.forall(a => compare(a, value, cp))
case x => cp(x.toString, value.toString)
}
}
}
case class Gt(key: String, value: Any) extends Expression {
def evalute[V, E](f: String => Any) = {
compare(f(key), value, ((a, b) => a > b))
}
}

但这不起作用:(
error: could not find implicit value for parameter ord: scala.math.Ordering[scala.math.Ordered[_ >: _$1 with _$2]]
compare(f(key), value, ((a, b) => a > b))

有没有办法在scala中将运算符作为函数传递?

最佳答案

(a, b) => a > b工作正常。你的问题在于类型。

  • 什么是VEevalute[V, E]应该是?
  • 你通过它(a, b) => a > b作为参数 cp: (Ordered[_], Ordered[_]) => Boolean .所以你有 a: Ordered[_]b: Ordered[_] .与 a: Ordered[X] forSome {type X} 相同和 b: Ordered[Y] forSome {type Y} .对于这些类型,a > b没有意义。
  • 关于scala - 如何使用 > <<= >= 作为函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048713/

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