代码之家  ›  专栏  ›  技术社区  ›  Łukasz Lew

Scala中Ponter/Reference语义的获取

  •  4
  • Łukasz Lew  · 技术社区  · 16 年前

    在C++中,我只需把指针(或引用)带到ARR[IDX]。

    class SetTo (val arr : Array[Double], val idx : Int) {
      def apply (d : Double) { arr(idx) = d }
    }
    

    难道没有更简单的方法吗?
    数组类没有方法返回对特定字段的某种引用吗?

    1 回复  |  直到 16 年前
        1
  •  9
  •   Randall Schulz    16 年前

    你能做的最好的就是你所说明的。但是 SetTo ArraySlot ArrayElement ArrayRef 看起来好多了。

    apply() 读取插槽和 update(newValue) 更换插槽。这样就可以在赋值的左侧使用该类的实例。但是,两者都通过 apply 并通过 update 方法 ()

    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)