2014-09-06 60 views
0

我有,我得到下面的一對輸出Scala的列表(斯卡拉2.10):斯卡拉的getClass深思

println(myList.getClass)` 
// class scala.collection.immutable.$colon$colon 

println(myList) 
// List(1, 2, 3,....) 

能否請您解釋一下:

  1. 什麼是$的意義冒號$冒號

  2. 爲什麼不從getClass派生的輸出表明這是一個List,而不僅僅是一些集合?

+0

@gabriele,雖然意圖很好,但你對這個問題的編輯並不好 - 看看你創建的子彈內部的尷尬編號。還有爲什麼額外反襯? ...請問您可以根據自己的喜好進行修改或修改嗎? – matanster 2014-09-09 06:45:03

+0

確定,我的不好。 – 2014-09-09 08:41:26

回答

2

首先,$colon$colon是在編碼一個JVM友好類::(但不是人類友好的)。回想一下,空列表是單身人士Nil,非空列表是::(讀爲「cons」),其頭部(這是一個元素)和尾部(這又是一個列表)。 因此非空列表始終是此類::的一個實例。但編譯器將其重命名爲$colon$colon,以便JVM很高興。

我不知道我理解你的第二個問題。 println(myList)的輸出簡單地重定向到List的方法toString(),該方法(通過幾個更多的間接尋址)打印字符串"List",後面跟着圓括號中的元素。就這樣。

+0

Got it!爲什麼downvote? – matanster 2014-09-06 23:18:20

+0

實際上,在語言設計中,保存兩個字節並調用此類「::」而非程序員使用它寫入「 - List」,並使用不同類型的「Nil」空列表? – matanster 2014-09-15 22:38:34