問題タブ [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 - 具体化された式で $read や $iw などの奇妙な名前は何をしていますか?
以下は、私の Scala プロンプトからの抜粋です。こちらのドキュメントで説明されているように、リフレクション API をインポートし、いくつかの式を具体化してみます。
$line4
これらの記号、$read
、および2 番目の記号が表示されるとは予想していませんでした$iw
。それらは何で、なぜそこにあるのですか?
scala - Scala パーサーが最後のブラケットをカットする
結果は次のとおりです。
私は期待しました:
Tree オブジェクトの位置を使用すると、最後の括弧}
(および行末) がありません。text.substring(t.pos.start, t.pos.end)
scala.reflect.api.Trees#Tree オブジェクトからすべてのテキストを抽出する方法はありますか?
アップデート
影響を受ける scala バージョン:
- 2.10.6 - sbt 0.13.x に必要
- 2.11.8
- 2.12.7
scala 2.10.6/2.12.7 の場合、結果は上記の出力と同じです。
プロジェクトを github に追加する
scala - Scala Reflection API を使用した実行時のインスタンス名
次の例から始めましょう。
Scala Reflection API (またはその他の方法) を使用して、実行時にクラスのインスタンスの名前を取得するにはどうすればよいですか? この情報を AST から取得する方法は?
同じ質問ですが、Java の場合: Java Reflection: How to get name of a variable?
scala - パラメータがプリミティブ型であるScalaでパラメータ型メソッドの戻り値の型を見つけることは可能ですか?
私が持っているとします:
Scala の各メソッドの戻り値の型を次のように出力します。
それで... listX の要素型が X であると判断できますが、listPrimitive の要素型が実際に java.lang.Integer であることをリフレクションによって判断する方法はありますか? ...
注意。List の types パラメータを見つけることができるので、これは JVM タイプの消去による問題ではないようです。パラメータの型が java.lang.[numbers] である場合、scala コンパイラはこの型情報を破棄するようです。
アップデート:
次の実験により、このタイプの情報が利用可能であると思われます。次のように定義するとします。
X.class は jar 経由でインポートされます。このケースが正しくコンパイルに失敗するためには、完全な型情報が X.class で利用可能でなければなりません。
更新 2:
Java シリアライゼーション ライブラリの scala 拡張機能を作成していると想像してください。以下を実装する必要があります。
次のいずれかに応じて、さまざまなことを行う必要がある関数:
私の問題は、私がこれまでにしか見ないことです:
clz は clz.getMethods()(i).getGenericReturnType() としてこの関数に提供されるためです。
clz:Class[_] から始めて、失われた要素タイプ情報を回復するにはどうすればよいですか?
TypeToken が役立つかどうかはわかりません。その使用法は次のとおりです。
T を提供する必要があります (つまり、コンパイル時に)。
それで、解決策への 1 つのパス... いくつかの clz:Class[_] が与えられた場合、そのメソッドの戻り値の型の TypeToken を特定できますか? scala コンパイラがタイプの不一致エラーを正しく生成するには、この情報が .class ファイルに (どこかに) 含まれている必要があるため、明らかにこれが可能です (上記を参照)。
scala - マクロ コンテキストで ClassSymbol の直接の親を取得する方法はありますか?
ClassSymbolの直接のスーパー クラス/特性を取得しようとしています。スーパースーパー..タイプも含まれているため、この方法baseClasses()
は私には機能しません。
java.lang.Class.getSuperclass()
andは実際には私のユースケースには十分ですが、マクロコンテキストでtojava.lang.Class.getInterfaces()
に移動する方法が見つかりません!ClassSymbol
java.lang.Class
scala - ClassTag のメソッド runtimeClass がワイルドカード クラスを返すのはなぜですか?
aのruntimeClass
メソッドは a をClassTag[T]
返しますClass[_]
。がの (実行時) クラスを表すClass[T]
ことがわかっているので、が返されることを期待します。ClassTag[T]
T
「any」を返すのはなぜClass
ですか?その根本的な理由はありますか?