5
A
回答
5
注意,在保羅·布徹的答案:power
方法,您可以訪問內部API,這可能是沒有任何必要或者如果你想在宏中(或者在REPL之外的運行時反射中)這樣做的話。
因此,例如,呼籲通過members
市民反射API不會提供一個普通的老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)))
如期望的那樣。我使用運行時反射這裏以簡化的例子,但這種將工作正好與你從你的Context
在宏獲得Universe
以同樣的方式。
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
我怎樣才能使它在斯卡拉類工作在編譯的時候? –
相關問題
- 1. 如何使用.NET的屬性獲取構造函數參數名稱?
- 2. 如何在Scala中獲取類型構造函數的參數?
- 3. 獲取構造函數的參數名稱
- 4. 宏從函數內部獲取函數名稱和參數值
- 5. 獲取使用函數構造函數創建的函數名稱
- 6. 如何獲取子構造函數的名稱?
- 7. 如何在__setattr__函數中獲取構造函數參數?
- 8. 獲取類的構造函數參數
- 9. 衛生宏:函數參數名稱?
- 10. Scala數組構造函數?
- 11. 如何在構造函數中獲取參數個數
- 12. R獲取函數參數的名稱
- 13. 無參數構造函數調用2參數構造函數
- 14. Scala類構造函數的默認參數命名
- 15. ActionScript - 從構造函數中獲取實例名稱而無需傳遞參數?
- 16. 構造函數(構造函數名稱)未定義
- 17. 如何模仿scala特質中的構造函數參數?
- 18. 使用宏來構造函數
- 19. Scala:使用hasmap作爲構造函數
- 20. Scala宏:獲取參數默認值
- 21. JavaScript構造函數和Scala構造函數有何不同?
- 22. Scala:構造函數採取Seq或可變參數
- 23. 如何在參數可選時獲取默認構造函數
- 24. 如何獲取傳遞給屬性構造函數的參數?
- 25. 無參數的構造函數V/S構造函數使用參數
- 26. Scala的參數字段和構造函數參數
- 27. Scala輔助構造函數
- 28. Scala - 分解構造函數
- 29. StructureMap - 通過名稱獲取構造函數依賴關係
- 30. 獲取對象的構造函數名稱
啊 - 好的一點是:電源模式。感謝您保存我的臉紅! –