簡體   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