我正在使用scalap來挑選關於Scala類的信息。適用於案例類,但我想查看一個類是否爲值類。到目前爲止,我還沒有發現任何可以告訴我的事情。任何人都知道如何區分價值類和非價值類嗎?價值類的scalap檢測
1
A
回答
4
$ cat ValueClass.scala
class ValueClass(val s: String) extends AnyVal {
def rcap = s.reverse.toUpperCase
}
$ scalap -cp . ValueClass
final class ValueClass extends scala.AnyVal {
val s : scala.Predef.String = { /* compiled code */ }
def this(s : scala.Predef.String) = { /* compiled code */ }
def rcap : java.lang.String = { /* compiled code */ }
override def hashCode() : scala.Int = { /* compiled code */ }
override def equals(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
}
object ValueClass extends scala.AnyRef {
def this() = { /* compiled code */ }
final def rcap$extension($this : ValueClass) : java.lang.String = { /* compiled code */ }
final def hashCode$extension($this : ValueClass)() : scala.Int = { /* compiled code */ }
final def equals$extension($this : ValueClass)(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
}
第一行給它拿走,NO 3:最後一類ValueClass擴展scala.AnyVal
編輯:如果你不使用scalap並且要在運行時做到這一點,你可以(非常hackishly)
class V(val v: Int) extends AnyVal {}
reflect.runtime.universe.typeOf[V].typeSymbol.companionSymbol.
typeSignature.members.exists(_.name.toString.endsWith("$extension"))
至少現在。也許將來會有一個更易於抓取的isValueClass
標誌。
+0
我明白你在說什麼,但我在實踐中遇到了問題。如果我爲我的類獲取一個Class對象,我可以調用clazz.getSuperclass我得到對象,而不是AnyVal。我也試過clazz.isInstanceOf [AnyVal],編譯器沒有它。所以我很難搞清楚如何測試AnyVal親子關係。有任何想法嗎? – Greg 2013-03-20 18:54:55
+1
這不完全是「使用scalap」,是嗎? – 2013-03-20 19:15:04
相關問題
- 1. 檢測類型定義的等價
- 2. 檢測和更換價值的onkeydown
- 3. 檢測某些價值和改變它
- 4. 檢索JSP價值
- 5. 檢測和降價文件
- 6. 檢查未來的價值
- 7. 檢查localStorage的價值
- 8. 使用價值 - $價值觀 - 類似$鍵
- 9. 如何檢測承諾價值的變化?
- 10. 檢測一擊「出口」價值的失敗
- 11. jQuery的選擇類價值
- 12. 泛型類的價值?
- 13. 工廠類別的價值
- 14. 獲取僞類的價值
- 15. 什麼類型的價值?
- 16. 檢測類的類型
- 17. 輸入值變化檢測使用類
- 18. 檢測null和「null」類JSON值? xcode
- 19. 無線電價值檢索
- 20. DropDownChoice檢票獲得價值
- 21. 檢測拳類
- 22. 類型檢測
- 23. 檢測[i]值
- 24. MongoDB:有沒有辦法使用聚合檢測價值趨勢?
- 25. 檢查接受的類型,而不是價值,與isDefinedAt
- 26. 如何檢查deserealized的類成員是否有價值?
- 27. 檢查選擇框,當值=等價值
- 28. 轉讓前值得檢查價值嗎?
- 29. 軟件測試:GUI的等價類?
- 30. 軟件測試中的等價類
順便說一下:https://groups.google.com/forum/?fromgroups=#!topic/scala-internals/wAR-E9HQLmA(不,它不是scalap解決方案,但可能會幫助某個會找到這個的人線)。 – 2013-03-19 20:59:27