Scala裏如何進行++和--操做?

問題

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?

相關文章
相關標籤/搜索