我有,我得到下面的一對輸出Scala的列表(斯卡拉2.10):斯卡拉的getClass深思
println(myList.getClass)`
// class scala.collection.immutable.$colon$colon
println(myList)
// List(1, 2, 3,....)
能否請您解釋一下:
什麼是$的意義冒號$冒號
爲什麼不從getClass派生的輸出表明這是一個List,而不僅僅是一些集合?
我有,我得到下面的一對輸出Scala的列表(斯卡拉2.10):斯卡拉的getClass深思
println(myList.getClass)`
// class scala.collection.immutable.$colon$colon
println(myList)
// List(1, 2, 3,....)
能否請您解釋一下:
什麼是$的意義冒號$冒號
爲什麼不從getClass派生的輸出表明這是一個List,而不僅僅是一些集合?
首先,$colon$colon
是在編碼一個JVM友好類::
(但不是人類友好的)。回想一下,空列表是單身人士Nil
,非空列表是::
(讀爲「cons」),其頭部(這是一個元素)和尾部(這又是一個列表)。 因此非空列表始終是此類::
的一個實例。但編譯器將其重命名爲$colon$colon
,以便JVM很高興。
我不知道我理解你的第二個問題。 println(myList)
的輸出簡單地重定向到List
的方法toString()
,該方法(通過幾個更多的間接尋址)打印字符串"List"
,後面跟着圓括號中的元素。就這樣。
@gabriele,雖然意圖很好,但你對這個問題的編輯並不好 - 看看你創建的子彈內部的尷尬編號。還有爲什麼額外反襯? ...請問您可以根據自己的喜好進行修改或修改嗎? – matanster 2014-09-09 06:45:03
確定,我的不好。 – 2014-09-09 08:41:26