問題タブ [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.

0 投票する
1 に答える
1376 参照

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 ruis scala.reflect.runtime.universe)。

もう 1 つの問題は、このメッセージのマージが 1 分間に何百回も発生する可能性があり、リフレクションが遅く複雑なプロセスのように見えることです。これがすべて計画どおりに機能する場合、オブジェクト タイプごとにリフレクションの結果をキャッシュする可能性があります。

更新: このようなことを考えていましたが、これはやり過ぎですか? または、マップ内のタイプを適切にキャプチャする必要がありますか? また、これはコンパイルされません。MapSymbolおよびStringそれらのコンテキストに適したタイプではありません。

asInstanceOf更新 2:のようなもので使用できるとは思いもしませんでしたMap[String, _]。@johny の 2 番目のコード例を使用して、ソリューションを考え出しました。メソッド名をクラスごとに にキャッシュしmutable.HashMap[Class[_], Set[String]]ます。

0 投票する
1 に答える
129 参照

scala - scala リフレクションを使用して apply メソッドを介して scala コレクションをインスタンス化する

たとえば、さまざまな scala コレクションのサブクラスのインスタンスを構築しようとするツールがありますscala.collection.Seq。特定のクラスを構築する必要があるかどうかは事前にわからないため、リフレクションを使用してapply、次のようにコンパニオン オブジェクトのメソッドを取得しようとしています (宣言と同様List[Int](1, 2, 3))。

それにもかかわらず、次の例外が発生しています。applyメソッドに何を渡す必要があるのか​​ わかりません。

事前に提供できるサポートに感謝します。

0 投票する
1 に答える
1400 参照

scala - Scala リフレクション: knownDirectSubclasses はシールされたトレイトに対してのみ機能しますか?

この質問SI-7046を考える と、これは私が期待したものではありません。

scalac test.scala && scala Test次の Scala 2.11.6 では、空が出力されますSet()

ただし、に変更trait Fooするとsealed trait Foo、期待どおりに印刷Set(class Bar, class Baz)されます。

何が起きてる?

0 投票する
0 に答える
163 参照

scala - scala でリフレクションを使用してジェネリック クラスをインスタンス化する方法

これらの特性で始まるクラス階層があります。

のすべての直接サブクラスのリストを自動的に作成する必要がありMessageKeyます。あちこち検索して、私はこの点にたどり着きました:

このコードは、 type のオブジェクトを提供しますMessageKey[Nothing]。上記のように、なんとかType各キーの にたどり着きましたが、使い方がわかりません。

私は次のようなことをしたいと思います

しかし、もちろん、そのままでは使えませんaType。どんな助けでも大歓迎です。

0 投票する
1 に答える
6732 参照

scala - 封印された特性のサブクラスを取得する

シールされたトレイトのサブクラスのリストを取得することは可能ですか (マクロ、何らかの形式の Shapeless automagic またはその他を介して):

  • コンパイル時?
  • 実行時に?
0 投票する
0 に答える
596 参照

scala - Scala でアノテーション付きクラスを取得する方法

Java ではorg.reflections、パッケージのスキャンと注釈付きクラスの検索に使用できます。

このような:

scalaで注釈付きのクラスを取得するには? と を使用scala 2.11scala-reflectます。

PSorg.reflectionsはscalaでうまく機能しますが、ネイティブインストゥルメントを検索します。

0 投票する
1 に答える
46 参照

scala - 型メンバーへのリフレクション?

私はこれが可能であることを知っています:

Aしかし、今は抽象型にしたい:

機能を実装するにはどうすればよいisDoubleですか?

0 投票する
0 に答える
93 参照

scala - scala-reflectで親の暗黙的なパラメータを見つける方法は?

私は2つのクラスを持っています:

Symbolの暗黙的なコンストラクターパラメーターに対応する場合、Y対応する親クラスの暗黙的なパラメーターのシンボルを見つけたい (存在する場合)。

ここで、同じタイプ (またはスーパータイプですが、これは私のユースケースには関係ありません) を持つようにフィルター処理する必要があります。試してみましたがxParam.typeSignature =:= yOrdSym.typeSignature、うまくいきませんでした。型パラメーターの所有者が異なるため、これは理にかなっています。ただし、どちらも機能xParam.typeSignature =:= yOrdSym.typeSignatureIn(xSym.toType)xParam.typeSignatureIn(ySym.toType) =:= yOrdSym.typeSignatureません。正しく行う方法は?