2012-02-06 56 views
4

我的一個函數產生一個數組 - 一組有序的,連續編號的記錄。但據我所知,Scala Array是一個可變集合,而函數方法表明在一般情況下返回一個不可變集合會更有意義。所以我只需撥打Array.toIndexedSeq返回IndexedSeq而不是Array。這可以被認爲是一個正確的事情嗎?它是否不會引入任何可能影響功能和結果使用的不明顯行爲,並可能被認爲是不可取的?這個問題有沒有更好的做法?如果在Scala中需要一個不可變數組,那麼返回IndexesSeq而不是Array是否正確?

回答

4

這可以被認爲是一個正確的事情嗎?

是的。

它不引入任何不明顯的行爲,可能會影響功能和結果的使用,並可能被認爲是不受歡迎的嗎?

不,我不知道。

這個問題有沒有更好的做法?

如果可能,儘量不要使用數組,除非當然性能是最重要的。

4

我能想到的唯一可能非顯而易見的事情是array.toIndexedSeq不像Java的Collections.unmodifiable*方法那樣在數組本身上創建一個簡單的包裝,而是將這些元素複製到一個新的集合中。 (否則後面的數組更改可能會導致「不可變」序列突然變異)。

+2

當然,非顯而易見的是Java的行爲。 :-)好吧,Java返回一個「只讀」版本,而不是一個不可變的版本。 – 2012-02-07 00:03:08

+0

「只讀」和不可變的,@ daniel-c-sobral有什麼區別? – Ivan 2012-02-08 03:23:33

+1

@伊萬,不可變的集合不支持變異。另一方面,只讀集合只是可變集合的不可修改視圖。請參見#1014行[此處](http://www.docjar.com/html/api/java/util/Collections.java.html)。 – missingfaktor 2012-02-08 09:41:15

相關問題