問題タブ [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 に答える
930 参照

scala - TypeTag[T] からコンパニオン オブジェクトのフィールド値を取得します

トレイトがサード パーティによって実装されている (プラグイン アーキテクチャを考えてください) という非常にまれなユース ケースがあり、各トレイトのコンパニオン オブジェクトのフィールドを取得したいと考えています。

シンプルなトレイトの実装は次のようになります。

IDプラグイン レジストリで、各プラグインの を取得したいと思います。型の消去を扱っているので、リフレクションが唯一の選択肢のようです。私は無駄に次のことを試しました:

しかし、ここでの問題は、typeOf[T]常に Module タイプではなく Class タイプを返すことです。したがって、次のランタイム エラーが発生します。

IDから各プラグインの値を取得する最良の方法は何TypeTagですか?

0 投票する
4 に答える
1158 参照

scala - Scala: リフレクションとケースクラス

次のコードは成功しますが、同じことを行うより良い方法はありますか? おそらくケースクラスに特有のものでしょうか?次のコードでは、単純なケース クラスの String 型のフィールドごとに、そのケース クラスのインスタンスのリストを調べて、そのフィールドの最長の文字列の長さを見つけます。

結果:

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

scala - マクロ展開の時点でシンボルが表示されているか影になっているかを調べる

Symbol準引用符でシンボルの名前をつなぎ合わせても他の何かを参照しないように、マクロ展開の時点で表示されているか、(たとえば、ローカル変数によって) シャドウされているかどうかを確認したいと考えています。

http://docs.scala-lang.org/overviews/reflection/annotations-names-scopes.htmlを見ると、囲んでいる字句スコープを調べて、同じ名前のシンボルが含まれているかどうかを確認することが 1 つのアイデアです。問題は、マクロを直接囲むスコープを取得する方法が見つからないことです。

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

scala - インプリシットをリフレクションで使用できるようにする方法

Scala (ランタイム) リフレクション API を使用して、暗黙 (実際には spire.math ライブラリ) を多用するコードをコンパイルしようとしています。

これらの Implicit は toolbox.eval が呼び出されるスコープで表示されますが、リフレクション コンパイルは引き続き失敗します。

この情報をツールボックスで利用できるようにするにはどうすればよいですか?

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

scala - scala で型情報を渡す

このように定義されたクラス階層がある場合

sealed trait A case class B() extends A case class C() extends A // and so on ..

そして別の場所で、上記のクラスを型としてその関数に動的に渡すメソッドを呼び出したい

(例: method[B](..){..} or method[C](..){..})

実行時にこれをどのように達成できますか?

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

scala - Scalaでは、返されたクラスメソッドのTypeTagを取得する方法は?

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

className "org.apache.project.Foo" とメソッド名 "bar" から typeOf[List[Bar]] を取得できるスカラ リフレクションの方法ですか?

助けてくれてどうもありがとう!

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

scala - Scalaでは、universe.TypeTag、TypeRef、Typeの違いは何ですか?

TypeTagTypeRef、およびの 3 つの異なるクラスがすべてユニバースにバインドされていますType。なぜ3つすべてが必要なのですか?しかない場合、またはTypeに変換するにはどうすればよいですTypeTagTypeRef?

たとえば、Scala リフレクション API 関数を介して共通のスーパー タイプを取得しました。

またはに変換するにはどうすればよいですTypeTagTypeRef?