たとえば、消去クラスを取得するには、関数def a[A:ClassManifest]
のマニフェストにアクセスする必要があります。私はPredef.implicitly関数を使用することができますが、その場合、私のコードはフルフォームdef a[A](implicit b:ClassManifest[A])
を使用している限り長くなります。 暗黙的な引数に便利な生成名がありますか?暗黙的な「暗黙的」すなわちdef a [A:B]またはdef A [%B]へのアクセス方法を教えてください。
答えて
Manifest
秒、ClassManifest
sおよびOptManifest
秒のためにそれを行うだろうPredef
における3つの定義済みの方法があります。それぞれ、manifest[T]
、classManifest[T]
とoptManifest[T]
が。同じパターンに従って、他の型クラスのための独自の "暗黙のゲッター"を書くことができます。ここでは、インスタンスmanifest[T]
ためのものです。だからここ
def manifest[T](implicit m: Manifest[T]) = m
は、あなた自身を書くことができ方法は次のとおりです。
trait UsefulTypeclass[A] {
def info = 42 // sample method
}
// the “implicit getter”
def usefulTypeclass[A](implicit tc: UsefulTypeclass[A]) = tc
// a method that uses the implicit getter
def foo[A: UsefulTypeclass] =
usefulTypeclass[A].info
暗黙のトリック:暗黙のゲッターに "apply"という名前を付けてUsefulTypeclassのコンパニオンオブジェクトに置くと、Tのtypeclassのインスタンスを表す値として "UsefulTypeclass [T]"を使用できます。 typeclassそのもの。 –
@RM素敵なトリックです。私は 'UsefulTypeclass [T]()'(余分な '()')でなければならないと思います。 –
実際には、括弧は必要ありません。 "apply"が定義されているので(TC {SomeClass})、TC(def apply [T](暗黙のx:TC [T])= x}というオブジェクトTCを呼び出すことができます暗黙的なパラメータリストを持つパラメータのないメソッドとして、[SomeClass]はTCオブジェクトへの参照から曖昧さを解消します。それは、TC.apply [SomeClass](theImplicitValue) –
scalap救助に!
私はこのコードを取った:
object TestThing extends App {
def one { println("one") }
def two[T] { println("two") }
def three[T : Manifest] { println("three") }
def four[T: Manifest, U : Manifest] { println("four") }
}
をしてscalapを通してそれを実行しました。
object TestThing extends java.lang.Object with scala.App with scala.ScalaObject {
def this() = { /* compiled code */ }
def one : scala.Unit = { /* compiled code */ }
def two[T] : scala.Unit = { /* compiled code */ }
def three[T](implicit evidence$1 : scala.Predef.Manifest[T]) : scala.Unit = { /* compiled code */ }
def four[T, U](implicit evidence$2 : scala.Predef.Manifest[T], evidence$3 : scala.Predef.Manifest[U]) : scala.Unit = { /* compiled code */ }
}
あなたが見ることができるように、最初の暗黙のマニフェストがevidence$1
と呼ばれている:ここで私が得たものです。第二と第三 - しかし別の範囲で! - evidence$2
とevidence$3
となります。だから...マニフェストを参照する方法です。
それにもかかわらず、クラス内で上位のマニフェストを削除すると、ファイル内の下位にあるマニフェストの名前が変更されることは私にとっては恐ろしいことです。同様に、IntelliJ Scalaプラグインの構文強調表示では、four()
の範囲のマニフェスト変数がevidence$1
とevidence$2
であり、evidence$3
が有効な変数であるとは考えられません。 evidence$1
ではありません)。全体として、暗黙のマニフェスト変数を使って遊ぶことについての警告兆候としてこれらのことに耳を傾けるべきでしょうか?
- 1. DateTimeから暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙的に暗黙変換に変換することができません
- 2. 暗黙的対明示的なインタフェース
- 3. 暗黙の変換を禁止する方法を教えてください。
- 4. は、暗黙的に
- 5. 暗黙的な変換:非参照
- 6. C++の暗黙的な変換
- 7. 暗黙的に暗黙的に符号なしタイプに変換される
- 8. LaTeXの式の暗黙的な改行
- 9. Scalaのシンプルな暗黙的な変換
- 10. varcharからVarbinaryへの暗黙的な変換方法は?
- 11. 暗黙的なdefのスカラー上位の型が "暗黙の値を見つけることができませんでした"と失敗しました
- 12. SQL Server 2008のセキュリティは、のdb_datareader暗黙的にVIEWのDEF権を持っている、など
- 13. 暗黙のクラス対形質への暗黙の変換
- 14. スカラーの汎用的な引数の暗黙的な変換
- 15. Postgresの「暗黙的なシーケンス」と「暗黙的なインデックス」は何を意味しますか?
- 16. インターフェイスデザイン - 明示的または暗黙的な包含
- 17. #pragmaの最後の暗黙的なバリア
- 18. 一般的な形質の暗黙的な変換
- 19. Dapper - オブジェクトへのSQLの暗黙的キャスト
- 20. テンプレートの暗黙的パラメータ
- 21. MessageVerifierのStringへのnilの暗黙的な変換なし
- 22. プライベート継承と暗黙的な変換
- 23. 暗黙的対DLLへの明示的なリンク
- 24. 暗黙的なルールとヘッダファイルを作る
- 25. Pythonでの暗黙的なモジュール検索?
- 26. Scalaの暗黙的な変換の問題
- 27. ASP.NET MVC - 暗黙的なフォーム操作
- 28. mysqlクエリと暗黙的に
- 29. Scalaの暗黙的な変換と暗黙的なパラメータの関係は何ですか?
- 30. WPFで暗黙的なスクロールバーを操作する方法は?
名前の小さいメソッドを宣言することはできますが、Scalacによって生成される魔法の名前に依存する必要はありません。 –