我正在使用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. 檢測和更換價值的onkeydown
- 2. 檢測某些價值和改變它
- 3. 檢索JSP價值
- 4. 檢測和降價文件
- 5. 檢查localStorage的價值
- 6. 使用價值 - $價值觀 - 類似$鍵
- 7. 檢測一擊「出口」價值的失敗
- 8. 什麼類型的價值?
- 9. jQuery的選擇類價值
- 10. 泛型類的價值?
- 11. 檢測類的類型
- 12. 輸入值變化檢測使用類
- 13. 類型檢測
- 14. 檢測[i]值
- 15. 如何檢查deserealized的類成員是否有價值?
- 16. 轉讓前值得檢查價值嗎?
- 17. 軟件測試:GUI的等價類?
- 18. 如何測試標籤的價值
- 19. 檢索一個void方法的價值
- 20. 檢查.NET手柄的價值^
- 21. jquery按價值分類
- 22. 從RecyclerViewAdapter類收回價值
- 23. 從類別獲得價值
- 24. 峯值檢測庫?
- 25. json的檢測類型
- 26. 檢測類似的網頁
- 27. 檢測SVGAnimatedString的類名
- 28. 檢測LaTeX類的名稱
- 29. React中的類型檢測
- 30. 檢測類型的存在
順便說一下:https://groups.google.com/forum/?fromgroups=#!topic/scala-internals/wAR-E9HQLmA(不,它不是scalap解決方案,但可能會幫助某個會找到這個的人線)。 – 2013-03-19 20:59:27