在Scala中,可以将方法作为参数传递给函数

时间:2014-02-02 07:55:39

标签: scala methods

我想做这样的事情:

(xs: Vector[Int], method:(Vector[Int] => Int)) = 
    selector match {
        case Case1 => (<compute xs>, <the max method of Vector>)
        case Case2 => (<compute xs>, <the min method of Vector>)
    }
 xs.method

它可以做到这一点:

(xs: Vector[Int], fn:(Vector[Int] => Int)) = 
    selector match {
        case Case1 => (<compute xs>, (xs: Vector[Int]) => xs.max)
        case Case2 => (<compute xs>, (xs: Vector[Int]) => xs.min)
    }
 fn(xs)

有没有办法在方法级别更直接地说出这样的内容?

感谢。

1 个答案:

答案 0 :(得分:0)

您需要创建一个简单地在输入向量上调用所需方法的lambda。您不必更改您将使用它的功能中的任何内容。即:

def foo(vec: Vector[Int], f: Vector[Int] => Int) = {
  ???
  f(vec)
}

// using it:
foo( vec, _.max )
foo( vec, _.min )

仅供参考_.max(x) => x.max的糖。