将带有任何参数的函数引用传递给Scala中的另一个函数

时间:2015-09-18 10:50:33

标签: scala function-pointers

在您不知道函数参数的情况下(例如,您希望在其上使用反射等),将Scala中的函数引用传递给另一个函数的最佳方法是什么?

我正在尝试定义这样的内容:

def test(f: (Any*) => Any) = ... // Any implementation 

并使用like:

调用它
def somefunc( arg1 : String, arg2 : Int, ... ) = {} // Any function with any arguments
test(somefunc) // Pass the reference to the function

可以做到吗?

2 个答案:

答案 0 :(得分:1)

这取决于您稍后要对该功能执行的操作。一个简单的解决方案是使用泛型:

line 5: j: command not found

答案 1 :(得分:0)

要扩展@Jens的答案,使用相同的想法可以添加多个参数:

scala> def somefunc( arg1 : String, arg2: String ) = {println(arg1 + arg2)}
def test[X,Y,Z]( f : (X,Y) => Z) = f
test( somefunc )("foo", "bar")

输出:

somefunc: (arg1: String, arg2: String)Unit

scala> test: [X, Y, Z](f: (X, Y) => Z)(X, Y) => Z

scala> foobar