0

Scalaジェネリック関数でネストされた型を使用するにはどうすればよいですか? このようなものを実装したいと思います

implicit def basicDBList2List[List[A]](value : BasicDBList) = value.toList.asInstanceOf[List[A]]

コンパイラは次のエラーを出します:

scala: not found: type A
  implicit def basicDBList2List[List[A]](value : BasicDBList) = value.toList.asInstanceOf[List[A]]
                                                                                               ^
4

2 に答える 2

2

あなたが書くとき:

implicit def basicDBList2List[List[A]](value: BasicDBList) = ...

...それはあなたがそれが意味すると思っていることを意味しません。Listライブラリ内の既存の特性を参照するのではなく、という新しい型パラメータを宣言してListいます! Listまた、新しく定義された型には、 と呼ばれる型パラメーターが必要であることを宣言してAいますが、実際には参照できません。

あなたがおそらく意味していたのは:

implicit def basicDBList2List[A](value: BasicDBList): List[A] = ...

...これは、どの type についても、 aを a にA変換できることを示しています。BasicDBListList[A]

ただし、これは大ざっぱなコードですが、次の 2 つの理由があります。

  1. BasicDBListクラスに実際に含まれている型は何ですか? おそらく不可能Aです。ClassCastException実行時に取得する可能性が非常に高くなります。
  2. BasicDBListからへの暗黙的な変換が必要なのはなぜList[A]ですか? それはほとんどの場合、悪い考えです。
于 2013-04-20T02:36:49.357 に答える
0

次のようにした方が良いと思います:

implicit def basicDBList2List[A](value : BasicDBList) = value.toList.asInstanceOf[List[A]]
于 2013-04-20T02:32:18.673 に答える