簡體   English   中英

如何從Scala中的特征實例化泛型函數?

[英]How to instantiate generic function from a trait in Scala?

當我嘗試定義擴展Trait的類時,Scala中出現一個奇怪的類型不匹配錯誤。 我定義以下特征

trait T {
    def f[A,B](x: A): B
}

然后定義以下實現此特征的類

class A() extends T {
    def f[Unit,Int](x: Unit) = {
        10
    }
}

其背后的想法是,我想保證任何具有T特征的類都具有一個稱為“ f”的函數,而不論該函數的形狀如何(即,不管其類型如何)。

當我嘗試執行上述代碼時出現問題,並且出現以下錯誤

定義的特征T:14:錯誤:類型不匹配; 找到:scala.Int(10)必需:Int

所以我不知道應該如何指定類型才能使這項工作。 我試圖實例化為

    def f[Unit,scala.Int(10)](x: Unit) = {
        10
    }

但是隨后,編譯器抱怨類型名稱不能帶有“。”。 我想念什么?

你可以做這樣的事情

trait T[A,B] {
  def f(x: A): B
}

class Impl1 extends T[Int, Unit] {
  override def f(x: Int): Unit = println(x)
}

class Impl2 extends T[Unit, Int] {
  override def f(x: Unit): Int = 10
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM