将通用方法分配给Scala中的变量

时间:2013-08-14 09:52:56

标签: scala generics methods delegates variable-assignment

如何声明可以使用此方法分配的变量:

def inTransaction[A](a: =>A): A =
  if(! Session.hasCurrentSession)
    _executeTransactionWithin(SessionFactory.newSession, a _)
  else {
    a
  }

提前致谢, 艾格。

2 个答案:

答案 0 :(得分:2)

正如范式所说,你需要指定一个类型。但作为一种解决方法,您可以使用对象。

object myFunc {
  def apply[A](a: =>A): A = ???
}

答案 1 :(得分:1)

您不能直接将方法分配给变量,它必须在闭包对象(Function*)中进行转换。通过在函数名称后添加_,可以隐式或手动进行此转换。

由于变量不能是通用变量,因此必须在分配期间修复该类型。例如:

scala> def size[A]( lst: List[A] ) = lst.size
size: [A](lst: List[A])Int

scala> var f = size[Int] _
f: List[Int] => Int = <function1>