簡體   English   中英

Scala 通配符用於遞歸泛型定義

[英]Scala wildcard for recursive generic definition

假設有以下特征定義:

trait MyTrait[A, B <: MyTrait[A, B]]有一個實現:

class MyClass extends MyTrait[Int, MyClass]

熱門編寫通用部分 function 的簽名來過濾MyTrait的任何實例?

def filterMyTrait: PartialFunction[MyTrait[_, _], Boolean] = {
  case myClass: MyClass => true
}

或者

def filterMyTrait: PartialFunction[MyTrait[_, _ <: MyTrait[_, _]], Boolean]  = {
  case myClass: MyClass => true
}

兩者都在編譯時失敗

type arguments [_$1,_$2] do not conform to trait MyTrait's type parameter bounds [A,B <: MyTrait[A,B]] def filterMyTrait: PartialFunction[MyTrait[_, _ <: MyTrait[_, _]], Boolean] = {

嘗試使您的方法通用

def filterMyTrait[A, B <: MyTrait[A, B]]: PartialFunction[MyTrait[A, B], Boolean] = {
  case myClass: MyClass => true
}

或使用存在類型

def filterMyTrait: PartialFunction[MyTrait[A, B] forSome {type A; type B <: MyTrait[A, B]}, Boolean] = {
  case myClass: MyClass => true
}

暫無
暫無

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

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