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

scala - Scala リフレクションでは、1 つのユニバースに複数のミラーを含めることができますか?

scala.reflection.api.Universe のすべてのサブクラスで、Mirror の複数の実装を見たことがありません。これは、Mirror と Universe をマージできるということですか。ユニバースとミラーを分離する設計上の決定は何ですか?

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

scala - Scala リフレクションでは、TypeTag のリフレクション関数にまだ型消去があるのはなぜですか?

次のscalaプログラムを検討してください:

TypeTag には Seq と String の両方の情報が含まれているため、正しい結果 "String" が返されることを期待しfn.returnTypeますが、この場合、次のプログラム出力が得られました。

その後、この例外をスローします。

明らかに型 String が消去され、ワイルドカード型 'A' のみが残りました

TypeTag が意図した正しい消去型を生成できないのはなぜですか?

0 投票する
2 に答える
158 参照

scala - 10LからClassTag[Long]を取得する方法

次のコードを使用します。

ボックス化されたタイプのみを取得します。

より良い解決策はありますか?それともscalaでは不可能ですか?

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

scala - クラス名でクラスのパラメーターを検索する

私はマクロ注釈に取り組んでおり、次のようなものがあります。

問題は、 whenclassNameが のようなものである場合List、パラメーターが必要なため、明らかに不平を言うことです。であればList[String]問題ありません。

正直なところ、classOf[List]リストのジェネリック型が不変であることを考慮して、たとえば が受け入れられない理由がよくわかりません。classOf[List[String]]と を実行するとclassOf[List[Integer]]、同じクラスが返されます。

findClassしたがって、私のメソッドが常にパラメーターなしのクラス、または不変パラメーターを含むクラスを受け取ると仮定すると、どのようにタイプチェックできValDefますか?

0 投票する
2 に答える
7733 参照

scala - Scala Reflection で、具体的なサブクラスのジェネリック型パラメーターを取得する方法は?

Generic スーパークラスがあると仮定します。

および具象サブクラス:

関数 "fn" の型パラメーターを scala リフレクションによって取得したいので、そのメンバーを選択してフィルター処理します。

私はscalaが正しい結果を与えることを期待していましたList(List(Int)).List(List(T))

ドキュメントをざっと見てみると、typeSignature が原因であることがわかりました。

そして、別の方法を使用することをお勧めします:

ただし、クラス Example はもはやジェネリックではないため、typeTag[Example] からサイトを取得する方法はありません。それとも、それを行う方法がなく、Java リフレクションに戻す必要がありますか?

どうもありがとうございました。

更新:いくつかの簡単なテストの後、MethodSymbol.returnTypeでさえ意図したとおりに機能しないことがわかりました。次のコード:

次のコードは結果を変更しないため、asSeenFromT修正することはできません。

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

scala - Scala マクロを使用して実装を検査する方法

メソッドの実装で特定のメソッドが使用されているかどうかを調べる必要があります。たとえば、私はこの素晴らしいアプリを持っています:

メソッドが配列のコンパニオン オブジェクトのgetGreetings関数を使用しているかどうかをテストしたいと思います。fillテストは上記の実装で成功し、たとえば次のように失敗します。

このビデオの助けを借りて、次のようなマクロを使用して実装を検査できることを学びました。

メソッドが使用されprintTreeていることが明らかになりました。fill

ここで欠けている部分は、どのメソッドのコードに対しても同じことを行う方法です。これにより、 method の内部にあるもののツリーを取得できますgetGreetings

前もって感謝します :)

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

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.Filefromを強制的に使用させるにはどうすればよいscala-reflect-2.11.4ですか?

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

scala - メソッド パラメータ名を scala マクロに保持する

私はインターフェースを持っています:

インターフェイスのメソッドを反復処理し、メソッド名とパラメーターを処理するマクロがあります。次のようにしてメソッド名にアクセスします。

doSomethingのパラメータの名前を出力すると、usefulNameになりx$1ました。これはなぜですか? 元のパラメーター名を保持する方法はありますか?

私は scala バージョン 2.11.8、macros paradise バージョン 2.1.0、および blackbox コンテキストを使用しています。

インターフェイスは、実際には私が管理する別の sbt プロジェクトの Java ソースです。私はコンパイルしようとしました:

パラメータ フラグは名前を保持するはずですが、以前と同じ結果が得られます。