2016-01-24 64 views
1

我明白,我可以写在Scala中如何使用=进行数组更新?

myArray(index) = newValue 

更新阵列。但是,我不明白这是如何在内部工作的。我从另一个问题中了解到,=通常不是Scala中的方法调用。我也明白括号是在对象上调用apply()方法的简写,所以我假设myArray(index)表示myArray.apply(index)

但是,它是如何工作的,为刚刚从方法调用返回的值赋值?

回答

3

你是正确

myArray(index) 

myArray.apply(index) 

但是语法糖,添加具有=操作的分配完全改变了含义:

myArray(index) = newValue 

是一个特殊的update方法的语法:

myArray.update(index, newValue) 

这并不只适用于数组;你可以自己使用它。事实上,Scala Collections框架中的许多类都使用这种语法糖。例如,scala.collection.mutable.Map#update(A,B)也可以做到这一点。

class MyClass(var i: Int) 
{ 
    def update(i: Int, j: Int) = { this.i = i + j } 
} 

var my = new MyClass(1) 
my(1) = 2 
println(my.i) // prints 3 
+0

这是否适用于所有类别?这是否意味着有一个通用的规则,还是只对数组起作用?如果它是特殊的,我怎样才能为我自己的类指定类似的东西? – lex82

+0

编辑我的答案,以解决您的评论。 – Clashsoft

+0

@ lex82:作为一般规则,Scala非常努力只有一般规则;-)与流行的观点相反,Scala是一种非常简单的语言,比Java更简单,正是因为它试图只有一些功能强大一般规则和没有特殊情况下,角落案件,边界案件,特殊的内置魔术语法等。 –

相关问题