2010-11-23 28 views
4

私はScalaコードで暗黙の変数を試しています。私は次のサンプルコードを書いたが、残念ながらそれはコンパイルに失敗する。私は不思議に思っていました、誰かがここで行方不明を知っていますか? (SBTとScalaの2.8.0を使用してLinux上で0.7.4)スカラ、抽象的な抽象型の型にアクセスする

おかげで、Tは、コンパイル時に忘れられている アリ

trait Feed 
trait FeedFactory { 
type T <: Feed 
implicit val op_name = classOf[T].getCanonicalName  
def create():T 
def destroy(op:T) 
} 

Error: class type required but FeedFactory.this.T found  
implicit val op_name = classOf[T].getCanonicalName 

答えて

5

タイプ(型消去を参照してください)。しかし、scalaはコンパイルによって型を保持するManifestを提供します。

ここでは、より完全なexplanationです。

+0

ありがとう、私はそれを暗黙のval op_name = { def op_name [T](暗黙のm:scala.reflect.Manifest [T])= {m.getClass.getCanonicalName}で修正しました。私は暗黙的な変数を定義する必要があるので、これを行うより良い方法はありますか? –

+1

@Aliスカラー2.8の場合、 'def op_name [T:Manifest] =暗黙的に[Manifest [T]]。getClass.getCanonicalName' – shellholic

+0

あなたの解決策は動作しません。常にNothingを返します。おそらくval op_name = {def op_name [T](暗黙的なm:scala.reflect.Manifest [T])= {m.getClass.getCanonicalName};を書くべきです。 op_name [T]}、エラー:X.this.Tで利用可能なマニフェストはありません –

関連する問題