【问题标题】:Assign generic method to variable in Scala将泛型方法分配给Scala中的变量
【发布时间】:2013-08-14 09:52:56
【问题描述】:

你如何声明一个可以用这种方法赋值的变量:

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

提前致谢, 埃塔姆。

【问题讨论】:

    标签: scala generics methods delegates variable-assignment


    【解决方案1】:

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

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

    【讨论】:

    • 我正在使用匿名类,我只是想问是否可以使它更简单。
    【解决方案2】:

    您不能直接将方法分配给变量,必须将其转换为闭包对象 (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>
    

    【讨论】:

    • 我不想指定 Int 参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多