如何克隆Vector

时间:2016-06-16 19:59:16

标签: scala

我有以下方法,其中cards的类型为Vector[Card]。 由于cards是一个字段,我想返回它的克隆。

我试过了:

class Deck(cards: Vector[Card] = Vector.empty[Card]) {

    //other methods

    def getCards(): Vector[Card] = {
        return cards.clone()
      }
}

然而,我得到了:

Error:(31, 18) method clone in class Object cannot be accessed in Vector[<error>]
 Access to protected method clone not permitted because
 prefix type Vector[<error>] does not conform to
 class Deck in package genericGame where the access take place
    return cards.clone()
                 ^

那么如何克隆该字段呢?

1 个答案:

答案 0 :(得分:3)

您不必,只需返回cards,通常需要克隆可变对象,您需要获取对象的副本并独立于源处理它们,因为源可以在以后更改。

不是Vector的情况,因为它是不可变的,你可以安全地保存对它的引用,它总是保持Card的相同值,除非卡本身是可变的,然后您可以添加复制卡片的方法并执行map

class Card(var name:String){
  def copy() = new Card(this.name)
}
val copy: Vector[Card] = vector.map(_.copy())

但正如我所说的,如果Card是不可变的(例如case类),则不需要这一切,那么你可以使用Vector而无需任何副本。