5
A
答えて
5
注ポール・ブッチャーの答えで:power
アプローチは、おそらくどちらかの必要のない、あなたは内部APIへのアクセスを提供することをマクロでこれをやろうとしている場合(またはREPL以外の実行時のリフレクションでは、その点で問題ありません)しません公共のリフレクションAPIにmembers
が提供する、昔ながらのSymbol
上isConstructor
呼び出す例えばので
作業を、あなたは最初にあなたがMethodSymbol
を持っていることを確認する必要があります。同様にtpe
と同じです。もちろんREPL以外のコードで内部APIにキャストすることもできますが、これは危険で不必要です。
import scala.reflect.runtime.universe._
class Foo(name: String, i: Int) { def this(name: String) = this(name, 0) }
typeOf[Foo].declaration(nme.CONSTRUCTOR).asTerm.alternatives.collect {
case m: MethodSymbol => m.paramss.map(_.map(_.name))
}
それとも:
typeOf[Foo].declarations.collect {
case m: MethodSymbol if m.isConstructor => m.paramss.map(_.map(_.name))
}
これらのいずれもが、あなたに以下を与える:
List(List(List(name, i)), List(List(name)))
希望としては以下がよりよい解決策です。ここでは例を簡略化するためにランタイムリフレクションを使用しましたが、これはUniverse
と全く同じように動作し、Context
マクロから取得します。
1
このREPL転写産物は、あなたが軌道に乗る必要があり、私は願っています:
Welcome to Scala version 2.10.0-RC5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_09).
Type in expressions to have them evaluated.
Type :help for more information.
scala> :power
** Power User mode enabled - BEEP WHIR GYVE **
** :phase has been set to 'typer'. **
** scala.tools.nsc._ has been imported **
** global._, definitions._ also imported **
** Try :help, :vals, power.<tab> **
scala> class Foo(x: Int, y: Float)
defined class Foo
scala> (typeOf[Foo].members find (_.isConstructor)).get.tpe.params map (_.name)
res1: List[$r.intp.global.Symbol#NameType] = List(x, y)
+0
コンパイル時にscalaクラスでどのように動作させることができますか? –
関連する問題
- 1. リフレクションを使用して引数名を取得する方法
- 2. コンストラクタが取るすべての引数のリストを取得
- 3. コンストラクタの引数の値を使用してオブジェクトの名前を見つける
- 4. intellij/eclipseからarg []を使用してコマンドライン引数を取得する方法
- 5. コントローラから引数/フラグを使用して値を取得する方法
- 6. Javaのコマンドライン引数としてファイル名を取得する方法
- 7. perlテンプレートツールキットを使用してユーザー名を取得する方法
- 8. CAS:RESTful APIを使用してユーザー名を取得する方法
- 9. System.getPropertyを使用してJavaファイルクラス名を取得する方法
- 10. enum名を使用してenum IDを取得する方法
- 11. Sharekitを使用してTwitterユーザー名を取得する方法
- 12. Python:子クラスのコンストラクタ引数で親のクラスパラメータを取得する方法
- 13. FileInfoからファイル名を取得して使用する方法
- 14. javaのコンストラクタ引数としてスキャナ入力を使用する
- 15. Mockitoを使ってコンストラクタ引数を渡す方法
- 16. Ambariを使用して名前ノードのホスト名を取得する方法は?
- 17. JNIを使用してVM引数を取得する
- 18. SteamTradeを使用した取引 - SteamWebセッションの取得方法?
- 19. jpqlクエリを使ってコンストラクタにリストを取得する方法
- 20. オブジェクトのコンストラクタ名を取得
- 21. PDO :: FETCH_CLASSTYPEを使用してコンストラクタ引数を渡します。
- 22. WebdriverIOを使用してウィンドウ変数を取得する方法
- 23. Kaminariを使用してページ数を取得する方法
- 24. 動的SQLでテーブル名の引数を使用する方法
- 25. 引数名を文字列として取得する - Python
- 26. インテントを使用して静的コンストラクタに引数を渡す
- 27. Simple Injectorを使用してコンストラクタに引数を渡す
- 28. コンストラクタでクラス名を取得
- 29. バッチファイルを使用して変数にファイル名を取得する
- 30. 関数を使用して列名を取得するSqlite3
ああ - 良い点について:パワーモード。私の黒ずみを保存してくれてありがとう! –