問題タブ [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 - TypeTag[T] からコンパニオン オブジェクトのフィールド値を取得します
トレイトがサード パーティによって実装されている (プラグイン アーキテクチャを考えてください) という非常にまれなユース ケースがあり、各トレイトのコンパニオン オブジェクトのフィールドを取得したいと考えています。
シンプルなトレイトの実装は次のようになります。
ID
プラグイン レジストリで、各プラグインの を取得したいと思います。型の消去を扱っているので、リフレクションが唯一の選択肢のようです。私は無駄に次のことを試しました:
しかし、ここでの問題は、typeOf[T]
常に Module タイプではなく Class タイプを返すことです。したがって、次のランタイム エラーが発生します。
ID
から各プラグインの値を取得する最良の方法は何TypeTag
ですか?
scala - Scala: リフレクションとケースクラス
次のコードは成功しますが、同じことを行うより良い方法はありますか? おそらくケースクラスに特有のものでしょうか?次のコードでは、単純なケース クラスの String 型のフィールドごとに、そのケース クラスのインスタンスのリストを調べて、そのフィールドの最長の文字列の長さを見つけます。
結果:
scala - マクロ展開の時点でシンボルが表示されているか影になっているかを調べる
Symbol
準引用符でシンボルの名前をつなぎ合わせても他の何かを参照しないように、マクロ展開の時点で表示されているか、(たとえば、ローカル変数によって) シャドウされているかどうかを確認したいと考えています。
http://docs.scala-lang.org/overviews/reflection/annotations-names-scopes.htmlを見ると、囲んでいる字句スコープを調べて、同じ名前のシンボルが含まれているかどうかを確認することが 1 つのアイデアです。問題は、マクロを直接囲むスコープを取得する方法が見つからないことです。
scala - インプリシットをリフレクションで使用できるようにする方法
Scala (ランタイム) リフレクション API を使用して、暗黙 (実際には spire.math ライブラリ) を多用するコードをコンパイルしようとしています。
これらの Implicit は toolbox.eval が呼び出されるスコープで表示されますが、リフレクション コンパイルは引き続き失敗します。
この情報をツールボックスで利用できるようにするにはどうすればよいですか?
scala - scala で型情報を渡す
このように定義されたクラス階層がある場合
sealed trait A
case class B() extends A
case class C() extends A
// and so on ..
そして別の場所で、上記のクラスを型としてその関数に動的に渡すメソッドを呼び出したい
(例: method[B](..){..} or method[C](..){..}
)
実行時にこれをどのように達成できますか?
scala - Scalaでは、返されたクラスメソッドのTypeTagを取得する方法は?
私はクラスを持っています:
className "org.apache.project.Foo" とメソッド名 "bar" から typeOf[List[Bar]] を取得できるスカラ リフレクションの方法ですか?
助けてくれてどうもありがとう!
scala - Scalaでは、universe.TypeTag、TypeRef、Typeの違いは何ですか?
TypeTag
、TypeRef
、およびの 3 つの異なるクラスがすべてユニバースにバインドされていますType
。なぜ3つすべてが必要なのですか?しかない場合、またはType
に変換するにはどうすればよいですTypeTag
かTypeRef
?
たとえば、Scala リフレクション API 関数を介して共通のスーパー タイプを取得しました。
またはに変換するにはどうすればよいですTypeTag
かTypeRef
?