代码之家  ›  专栏  ›  技术社区  ›  Dr Y Wit

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

  •  0
  • Dr Y Wit  · 技术社区  · 6 年前

    以下代码工作正常

      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) 没有定义功能值。

    0 回复  |  直到 6 年前
        1
  •  2
  •   Luis Miguel Mejía Suárez    6 年前

    补充 my other answer 您可以这样做:

    println(exec(10, 10)(_ >= _))
    
        2
  •  0
  •   Dr Y Wit    6 年前

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

    比较方法在中声明 Int 以以下方式

    def>=(x: Int): Boolean
    

    因此,他们需要一个 内景 并应用于一个参数。 如果不使用两个参数“绑定”这些方法,就无法将其作为参数传递。

    我们可以通过提前声明方法或函数值并将其映射到 >= 中的方法 内景 如下所示

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

    或者在表单中使用匿名函数 _ >= _