按名称类型参数

San*_*ane 5 scala pass-by-name

想象一下,我有以下类定义:

class Foo[T]
Run Code Online (Sandbox Code Playgroud)

我想做以下事情

def bar(x:Foo[ =>Int ]):Int = ???
Run Code Online (Sandbox Code Playgroud)

但编译器失败,"此处不允许使用by-name参数类型"

如何使用通配名类型作为通用方法的类型参数?

Jea*_*let 9

你必须提供自己的懒惰包装.像这样的东西:

class Lazy[T](wrp: => T) {
  lazy val value: T = wrp
}
Run Code Online (Sandbox Code Playgroud)

然后:

def bar(x: Foo[Lazy[T]]): Int = ???
Run Code Online (Sandbox Code Playgroud)

  • @pedrofurla.不允许(val参数可能无法按名称调用).如果是的话,在什么时候应该初始化价值呢? (3认同)