繁体   English   中英

通过将 Unit 作为类型传递给泛型特征的可选方法参数

[英]Optional method argument by passing Unit as type to generic trait

说我有一个特点:

trait Foo[T] {
    val x: T => Any
}

现在我想通过将其设为一个单位来省略 function 参数:

class Bar extends Foo[Unit] {
  override val x = () => "Hello"
}

上面的代码无法编译(“x 不会覆盖任何内容”)。

有没有办法在 Scala 中进行这项工作?

我认为这里的误解是()不是Unit类型的值,而是表示一个空参数列表。 所以

() => "Hello"

是没有参数的一元 function。 但是,您的 trait 需要一个 function ,它接受一个Unit类型的参数。

如果你删除了这里不需要的override ,你会得到一个编译器错误,它将指向那个方向。 如果您随后将()替换为通配符_或更好的(_: Unit) ,您的代码将编译。

trait Foo[T] {
    val x: T => Any
}

trait Bar extends Foo[Unit] {
  val x: Unit => Any = (_: Unit) => "Hello"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM