Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

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
Arrays 如何在Scala中获得Ponter/Reference语义 C++中,我只需要把指针(或引用)带到ARR[IDX]。 在Scala中,我发现自己创建这个类是为了模拟指针语义 class SetTo (val arr : Array[Double], val idx : Int) { def apply (d : Double) { arr(idx) = d } }_Arrays_Scala_Reference_Pointers_Scala 2.8 - Fatal编程技术网

Arrays 如何在Scala中获得Ponter/Reference语义 C++中,我只需要把指针(或引用)带到ARR[IDX]。 在Scala中,我发现自己创建这个类是为了模拟指针语义 class SetTo (val arr : Array[Double], val idx : Int) { def apply (d : Double) { arr(idx) = d } }

Arrays 如何在Scala中获得Ponter/Reference语义 C++中,我只需要把指针(或引用)带到ARR[IDX]。 在Scala中,我发现自己创建这个类是为了模拟指针语义 class SetTo (val arr : Array[Double], val idx : Int) { def apply (d : Double) { arr(idx) = d } },arrays,scala,reference,pointers,scala-2.8,Arrays,Scala,Reference,Pointers,Scala 2.8,难道没有更简单的方法吗? Array类没有方法返回对特定字段的某种引用吗?Scala中使用的数组是JVM数组(在2.8中),JVM数组没有插槽引用的概念 你能做的最好的就是你所说明的。但是设置为对我来说并不是一个好名字ArraySlot,ArrayElement或ArrayRef似乎更好 此外,您可能需要实现apply()来读取插槽,并实现update(newValue)来替换插槽。这样就可以在赋值的左侧使用该类的实例。但是,通过apply检索值和通过update方法替换值都需要空参数列表()

难道没有更简单的方法吗?

Array类没有方法返回对特定字段的某种引用吗?

Scala中使用的数组是JVM数组(在2.8中),JVM数组没有插槽引用的概念

你能做的最好的就是你所说明的。但是
设置为
对我来说并不是一个好名字
ArraySlot
ArrayElement
ArrayRef
似乎更好

此外,您可能需要实现
apply()
来读取插槽,并实现
update(newValue)
来替换插槽。这样就可以在赋值的左侧使用该类的实例。但是,通过
apply
检索值和通过
update
方法替换值都需要空参数列表
()


没有默认的mutable.SeqRef或类似的东西吗?真正地我们不应该把它添加到标准库中吗?我想它可以使用mutable.Seq而不是数组。@Alexy:从可读性的角度来看,这可能更好。我突然想到,也可以使用隐式转换从引用的数组槽中读取值。
class ASlot[T](a: Array[T], slot: Int) {
  def apply(): T = a(slot);
  def update(newValue: T): Unit = a(slot) = newValue
}

scala> val a1 = Array(1, 2, 3)
a1: Array[Int] = Array(1, 2, 3)

scala> val as1 = new ASlot(a1, 1)
as1: ASlot[Int] = ASlot@e6c6d7

scala> as1()
res0: Int = 2

scala> as1() = 100

scala> as1()
res1: Int = 100

scala> a1
res2: Array[Int] = Array(1, 100, 3)