使用运算符(或合成函数)作为参数

Using operator (or synthetic function) as a parameter

下面的代码工作正常

  def exec(f: (Int, Int) => Boolean, p1: Int, p2: Int) = f(p1, p2)
  val >= = (x1: Int, x2: Int) => x1 >= x2
  println(exec(>=, 10, 10))

但是问题是,是否可以在没有显式重新定义运算符(合成函数)的情况下让它工作?

更新

很明显,它像这样工作得很好

println(exec(_ >= _, 10, 10))

问题是是否可以在不定义功能值的情况下以 exec(>=, 10, 10) 形式工作。

补充你可以这样做:

println(exec(10, 10)(_ >= _))

让我试着回答我自己的问题。

比较方法在Int中声明如下

def>=(x: Int): Boolean

因此它们被称为 Int 的实例并应用于一个参数。 如果没有 "binding" 它们带有两个参数,则无法将此类方法作为参数传递。

我们可以通过预先声明方法或函数值并将其映射到 Int 中的 >= 方法来实现,如下所示

def >= (x1: Int, x2: Int) = x1 >= x2
def >= = (_: Int) >= (_: Int)
val >= = (x1: Int, x2: Int) => x1 >= x2
val >= = (_: Int) >= (_: Int)

或使用形式为 _ >= _ 的匿名函数。