シェイプレスを使用して、関数にパラメーターとして渡されるクラスの名前を取得したいと思います。私はこれを試しました:
def sayMyName[T](t: T): String = Typeable[T].describe // error: class type required but T found
T
コンクリートタイプに交換すれば問題ありません。シェイプレスを使ってこのような作品を作ることは可能ですか?
Typeable
タイプのコンテキストバウンドとしてtypeclassを追加する必要がありますT
:
def sayMyName[T: Typeable](t: T): String = Typeable[T].describe
sayMyName("") //String
暗黙的なパラメータを明示的に宣言することもできます。
def sayMyName[T](t: T)(implicit typeable: Typeable[T]): String = Typeable[T].describe
コンテキストバウンドを追加することにより、コンパイラに、具体的な型で呼び出されるTypeable
までsayMyName
型クラスの解決を待つように要求します。すぐには解決しません(Tの実際の型は現時点ではまだわからないため、不可能です)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加