Scala没有++和--运算符,是否有一些相似的操做符或方法能够替代?oop
由于val字段是不可变的,它们不能递增或递减,可是声明为var的Int字段是可变的,能够使用Scala的+=和−=方法:ui
scala> var a = 1 a: Int = 1 scala> a += 1 scala> println(a) 2 scala> a −= 1 scala> println(a) 1
另一个好处是,你能够使用相似的方法进行乘法和除法操做:scala
scala> var i = 1 i: Int = 1 scala> i *= 2 scala> println(i) 2 scala> i *= 2 scala> println(i) 4 scala> i /= 2 scala> println(i) 2
注意这些符号不是操做符,它们是做为声明为var的Int字段的可用的方法实现的,试图在val字段中使用它们会致使编译时错误:code
scala> val x = 1 x: Int = 1 scala> x += 1 <console>:9: error: value += is not a member of Int x += 1 ^
正如以上所说,符号+=、−=、*=和/=操做符,它们是方法,这种用库而不是操做符构建功能的方法是Scala中一致的模式。例如,Actors不是内置在语言中,而是做为库实现的。rem
这种方法的另外一个好处是,除了Int类型以外,你还能够对其余类型调用同名的方法。例如,Double类和Float类中也有相同名称的方法:get
scala> var x = 1d x: Double = 1.0 scala> x += 1 scala> println(x) 2.0 scala> var x = 1f x: Float = 1.0 scala> x += 1 scala> println(x) 2.0
另外,+=、−=、*=和/=方法没有返回值,若是你直接使用的话,会抛出异常,好比以下代码:it
@Test def testIncrement2: Unit = { var a = 0 val b = a += 1 var c: Int = b println(b) }
异常信息以下:io
Error:(55, 17) type mismatch; found : Unit required: Int var c:Int = b
正确的代码是:console
@Test def testIncrement: Unit = { var a = 0 a += 1 val b = a var c: Int = b println(b) }
问题参考连接:Scala - While Loop: increment with +=
type mismatch error (found: Unit, required: Int)编译
编译自:Scala has no ++ or -- operator; how to increment or decrement an integer?