当存在多个函数时,如何通过命名方法返回函数?

时间:2015-10-09 19:42:11

标签: scala

我试图通过这样做从java.sql.PreparedStatement中的方法返回一个函数:

def getSetDateFunction(stmt:PreparedStatement)={
  stmt.setDate _
}

这失败了

ambiguous reference to overloaded definition,
[error] both method setDate in trait PreparedStatement of type (x$1: Int, x$2: java.sql.Date, x$3: java.util.Calendar)Unit
[error] and  method setDate in trait PreparedStatement of type (x$1: Int, x$2: java.sql.Date)Unit
[error] match expected type ?
[error]     stmt.setDate _
[error]          ^
[error] one error found

有没有办法提示我要返回哪一种方法?

2 个答案:

答案 0 :(得分:6)

是的,您可以通过显式提供其参数的数量和类型来指定该函数。

假设你想要一个带有两个参数的那个:

def getSetDateFunction(stmt: PreparedStatement): (Int, java.sql.Date) => Unit =
  stmt.setDate

或者:

def getSetDateFunction(stmt: PreparedStatement) =
  stmt.setDate(_: Int, _: java.sql.Date)

答案 1 :(得分:2)

您可以通过指定getSetDateFunction的返回类型来提示返回:

def getSetDateFunction(stmt:PreparedStatement):(Int,java.sql.Date)=>Unit = {
   stmt.setDate _
}

将返回第二个功能