問題タブ [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 リフレクションでは、1 つのユニバースに複数のミラーを含めることができますか?
scala.reflection.api.Universe のすべてのサブクラスで、Mirror の複数の実装を見たことがありません。これは、Mirror と Universe をマージできるということですか。ユニバースとミラーを分離する設計上の決定は何ですか?
scala - Scala リフレクションでは、TypeTag のリフレクション関数にまだ型消去があるのはなぜですか?
次のscalaプログラムを検討してください:
TypeTag には Seq と String の両方の情報が含まれているため、正しい結果 "String" が返されることを期待しfn.returnType
ますが、この場合、次のプログラム出力が得られました。
その後、この例外をスローします。
明らかに型 String が消去され、ワイルドカード型 'A' のみが残りました
TypeTag が意図した正しい消去型を生成できないのはなぜですか?
scala - 10LからClassTag[Long]を取得する方法
次のコードを使用します。
ボックス化されたタイプのみを取得します。
より良い解決策はありますか?それともscalaでは不可能ですか?
scala - クラス名でクラスのパラメーターを検索する
私はマクロ注釈に取り組んでおり、次のようなものがあります。
問題は、 whenclassName
が のようなものである場合List
、パラメーターが必要なため、明らかに不平を言うことです。であればList[String]
問題ありません。
正直なところ、classOf[List]
リストのジェネリック型が不変であることを考慮して、たとえば が受け入れられない理由がよくわかりません。classOf[List[String]]
と を実行するとclassOf[List[Integer]]
、同じクラスが返されます。
findClass
したがって、私のメソッドが常にパラメーターなしのクラス、または不変パラメーターを含むクラスを受け取ると仮定すると、どのようにタイプチェックできValDef
ますか?
scala - Scala Reflection で、具体的なサブクラスのジェネリック型パラメーターを取得する方法は?
Generic スーパークラスがあると仮定します。
および具象サブクラス:
関数 "fn" の型パラメーターを scala リフレクションによって取得したいので、そのメンバーを選択してフィルター処理します。
私はscalaが正しい結果を与えることを期待していましたList(List(Int))
.List(List(T))
ドキュメントをざっと見てみると、typeSignature が原因であることがわかりました。
そして、別の方法を使用することをお勧めします:
ただし、クラス Example はもはやジェネリックではないため、typeTag[Example] からサイトを取得する方法はありません。それとも、それを行う方法がなく、Java リフレクションに戻す必要がありますか?
どうもありがとうございました。
更新:いくつかの簡単なテストの後、MethodSymbol.returnTypeでさえ意図したとおりに機能しないことがわかりました。次のコード:
次のコードは結果を変更しないため、asSeenFromでT
修正することはできません。
scala - Scala マクロを使用して実装を検査する方法
メソッドの実装で特定のメソッドが使用されているかどうかを調べる必要があります。たとえば、私はこの素晴らしいアプリを持っています:
メソッドが配列のコンパニオン オブジェクトのgetGreetings
関数を使用しているかどうかをテストしたいと思います。fill
テストは上記の実装で成功し、たとえば次のように失敗します。
このビデオの助けを借りて、次のようなマクロを使用して実装を検査できることを学びました。
メソッドが使用されprintTree
ていることが明らかになりました。fill
ここで欠けている部分は、どのメソッドのコードに対しても同じことを行う方法です。これにより、 method の内部にあるもののツリーを取得できますgetGreetings
。
前もって感謝します :)
scala - プロジェクトに scala.reflect.io.File をインポートするにはどうすればよいですか?
IntelliJ IDE を使用しています。
import scala.reflect.io.File
私はパッケージからしたい- scala-reflect-2.11.4
。しかし、 と入力するimport scala.reflect
と、コンパイラはclass reflect
パッケージの を使用しようとしていると認識しますscala-library-2.11.8
。
コンパイラに import the class scala.reflect.File
fromを強制的に使用させるにはどうすればよいscala-reflect-2.11.4
ですか?
scala - メソッド パラメータ名を scala マクロに保持する
私はインターフェースを持っています:
インターフェイスのメソッドを反復処理し、メソッド名とパラメーターを処理するマクロがあります。次のようにしてメソッド名にアクセスします。
doSomething
のパラメータの名前を出力すると、usefulName
になりx$1
ました。これはなぜですか? 元のパラメーター名を保持する方法はありますか?
私は scala バージョン 2.11.8、macros paradise バージョン 2.1.0、および blackbox コンテキストを使用しています。
インターフェイスは、実際には私が管理する別の sbt プロジェクトの Java ソースです。私はコンパイルしようとしました:
パラメータ フラグは名前を保持するはずですが、以前と同じ結果が得られます。