使用运算符(或合成函数)作为参数
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)
或使用形式为 _ >= _
的匿名函数。
下面的代码工作正常
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)
或使用形式为 _ >= _
的匿名函数。