如果Scala中需要不可变数组,返回IndexesSeq而不是Array是否正确?

时间:2012-02-06 20:49:14

标签: arrays scala immutability scala-collections

我的一个函数产生一个数组 - 一组有序的,连续编号的记录。但据我所知,Scala Array是一个可变集合,而功能方法表明在一般情况下返回不可变集合会更有意义。因此,我只需致电Array.toIndexedSeq即可返回IndexedSeq而不是Array。这可以被认为是正确的做法吗?它是否会引入任何可能影响功能和结果使用的明显行为,并且可能被认为是不合需要的?这个问题有没有更好的做法?

2 个答案:

答案 0 :(得分:4)

  

这可以被视为正确的事吗?

  

它是否会引入任何可能影响该行为的不明显行为   功能和结果用法可能被认为是不合需要的吗?

不,不是我知道的。

  

这个问题有更好的做法吗?

如果可能,尝试完全取消使用数组,除非性能至关重要。

答案 1 :(得分:4)

我能想到的唯一可能不显而易见的事情是array.toIndexedSeq不像Java的Collections.unmodifiable*方法那样在数组本身上创建一个简单的包装器,而是将元素复制到一个新的集合中。 (否则后来数组中的更改可能会导致“不可变”序列突然发生变异。)