Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何克隆载体_Scala - Fatal编程技术网

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
类),那么就不需要所有这些了,那么您可以使用
向量
,而不需要任何副本。

向量是不可变的。只需返回
卡片
,任何东西都无法修改它(如果你查看可克隆特征,你会发现它只用于可变集合),向量是不可变的。只需返回
卡片
,任何东西都无法修改它(如果您查看可克隆特性,您将看到它仅用于可变集合)