Scala 如何克隆载体
我有以下方法,其中Scala 如何克隆载体,scala,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
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()
^
错误:(31,18)无法在Vector[]中访问类对象中的方法克隆
不允许访问受保护的方法克隆,因为
前缀类型向量[]不符合
在包genericGame中进行访问的类组
返回卡。克隆()
^
那么我如何克隆字段呢?您不必,只需返回
卡片即可。对于可变对象,通常需要克隆,您需要获取对象的副本,并独立于源进行操作,因为源以后可能会更改
向量的情况并非如此,因为它是不可变的,所以您可以安全地保留对它的引用,并且它将始终保持卡的相同值,除非卡本身是可变的,然后您可以添加一种方法来复制卡并进行映射
class Card(var name:String){
def copy() = new Card(this.name)
}
val copy: Vector[Card] = vector.map(_.copy())
但是正如我所说的,如果卡片
是不可变的(例如case
类),那么您就可以使用向量
,而不需要任何副本。您不必,只需返回卡片
,对于可变对象,通常需要克隆,您需要获取对象的副本,并独立于源进行操作,因为源以后可能会更改
向量的情况并非如此,因为它是不可变的,所以您可以安全地保留对它的引用,并且它将始终保持卡的相同值,除非卡本身是可变的,然后您可以添加一种方法来复制卡并进行映射
class Card(var name:String){
def copy() = new Card(this.name)
}
val copy: Vector[Card] = vector.map(_.copy())
但是正如我所说的,如果卡片
是不可变的(例如case
类),那么就不需要所有这些了,那么您可以使用向量
,而不需要任何副本。向量是不可变的。只需返回卡片
,任何东西都无法修改它(如果你查看可克隆特征,你会发现它只用于可变集合),向量是不可变的。只需返回卡片
,任何东西都无法修改它(如果您查看可克隆特性,您将看到它仅用于可变集合)