問題タブ [scala-reflect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Scala リフレクションを使用してオブジェクトのメソッドをチェックするか、Map でキーの型を見つける
メッセージに変数のマージを実装するクラスを Ruby から Scala 2.11 に移植しています。オブジェクトの配列を merge メソッドに渡し、メッセージのテキストで参照されているキーを各オブジェクトで検索させたいと思います。
このコアは、検索する単一のキーと、キーを検索する単一のオブジェクトを受け取る lookUp(key: String, obj: AnyRef) と呼ばれるメソッドです。オブジェクトが Map で、Map のキーが Symbol または String の場合、要求されたキーを Map で探します。それ以外の場合は、オブジェクトにキーと同じ名前のメソッドがあるかどうかを確認し、ある場合はそのメソッドを呼び出します。
既存の Ruby コードでは、これを行うのは簡単です。
簡単に実行できるので、Ruby コードは同じ名前のインスタンス変数も探します。私の Scala バージョンでは必ずしもその機能が必要なわけではありません。
私が抱えている問題の 1 つは、私が見つけた例では、呼び出すことができるようにオブジェクトのクラスを事前に知っている必要があることですru.typeOf[MyClass].declaration(ru.TermName("key"))
(where ru
is scala.reflect.runtime.universe
)。
もう 1 つの問題は、このメッセージのマージが 1 分間に何百回も発生する可能性があり、リフレクションが遅く複雑なプロセスのように見えることです。これがすべて計画どおりに機能する場合、オブジェクト タイプごとにリフレクションの結果をキャッシュする可能性があります。
更新: このようなことを考えていましたが、これはやり過ぎですか? または、マップ内のタイプを適切にキャプチャする必要がありますか? また、これはコンパイルされません。Map
、Symbol
およびString
それらのコンテキストに適したタイプではありません。
asInstanceOf
更新 2:のようなもので使用できるとは思いもしませんでしたMap[String, _]
。@johny の 2 番目のコード例を使用して、ソリューションを考え出しました。メソッド名をクラスごとに にキャッシュしmutable.HashMap[Class[_], Set[String]]
ます。
scala - scala リフレクションを使用して apply メソッドを介して scala コレクションをインスタンス化する
たとえば、さまざまな scala コレクションのサブクラスのインスタンスを構築しようとするツールがありますscala.collection.Seq
。特定のクラスを構築する必要があるかどうかは事前にわからないため、リフレクションを使用してapply
、次のようにコンパニオン オブジェクトのメソッドを取得しようとしています (宣言と同様List[Int](1, 2, 3)
)。
それにもかかわらず、次の例外が発生しています。apply
メソッドに何を渡す必要があるのか わかりません。
事前に提供できるサポートに感謝します。
scala - scala でリフレクションを使用してジェネリック クラスをインスタンス化する方法
これらの特性で始まるクラス階層があります。
のすべての直接サブクラスのリストを自動的に作成する必要がありMessageKey
ます。あちこち検索して、私はこの点にたどり着きました:
このコードは、 type のオブジェクトを提供しますMessageKey[Nothing]
。上記のように、なんとかType
各キーの にたどり着きましたが、使い方がわかりません。
私は次のようなことをしたいと思います
しかし、もちろん、そのままでは使えませんaType
。どんな助けでも大歓迎です。
scala - 封印された特性のサブクラスを取得する
シールされたトレイトのサブクラスのリストを取得することは可能ですか (マクロ、何らかの形式の Shapeless automagic またはその他を介して):
- コンパイル時?
- 実行時に?
scala - Scala でアノテーション付きクラスを取得する方法
Java ではorg.reflections
、パッケージのスキャンと注釈付きクラスの検索に使用できます。
このような:
scalaで注釈付きのクラスを取得するには? と を使用scala 2.11
しscala-reflect
ます。
PSorg.reflections
はscalaでうまく機能しますが、ネイティブインストゥルメントを検索します。
scala - 型メンバーへのリフレクション?
私はこれが可能であることを知っています:
A
しかし、今は抽象型にしたい:
機能を実装するにはどうすればよいisDouble
ですか?
scala - scala-reflectで親の暗黙的なパラメータを見つける方法は?
私は2つのクラスを持っています:
Symbol
の暗黙的なコンストラクターパラメーターに対応する場合、Y
対応する親クラスの暗黙的なパラメーターのシンボルを見つけたい (存在する場合)。
ここで、同じタイプ (またはスーパータイプですが、これは私のユースケースには関係ありません) を持つようにフィルター処理する必要があります。試してみましたがxParam.typeSignature =:= yOrdSym.typeSignature
、うまくいきませんでした。型パラメーターの所有者が異なるため、これは理にかなっています。ただし、どちらも機能xParam.typeSignature =:= yOrdSym.typeSignatureIn(xSym.toType)
しxParam.typeSignatureIn(ySym.toType) =:= yOrdSym.typeSignature
ません。正しく行う方法は?