2017-01-06 74 views
0

通常可以獲取給予類的所有參數/構造函數參數嗎?獲取傳遞給Scala中的一個類的所有參數

喜歡的東西:

trait GetMyArgs { 
    def myArgs = ??? 
} 

class Foo(i: Int, d: Double) extends GetMyArgs 

=>

scala> val f = new Foo(5, 6.6) 
scala> f.myArgs 
(5, 6.6) // or similar 
+2

你想要做什麼?使用反射通常是不鼓勵 – daydreamer

+0

看看http://scalameta.org/ – pedrorijo91

+0

謝謝,@daydreamer我本質上是做一個memoization的形式,有一個很好的方式來做到這一點,作爲一個地圖實現一個函數,但這具有能夠將記憶混合到現有功能的好處。 – spiffman

回答

0
def myArgs = { 
    this.getClass.getDeclaredFields 
     .toList 
     .map(i => { 
     i.setAccessible(true) 
     i.getName -> i.get(this) 
     }).toMap 
    } 

你可以使用Java的reflection做到這一點。但需要調出,如果變量不使用且構造函數參數不是val,則myArgs將輸出Map

+0

謝謝!這實際上是一個很好的屬性,不包含在我的情況下未使用或存儲爲成員的變量。我所尋找的基本上是構造類的特定實例的「指紋」,所以如果某個變量不同但類相同,它們應該具有相同的指紋。 – spiffman

+0

我也應該注意到,這實際上是'hashCode'函數爲case類所做的。 – spiffman

相關問題