さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

scalaコンパイルエラー備忘録「value += is not a member of Int」とは?

現在仕事ではScalaを触ってます。 期間は1か月満たないくらいです。

今後のために、エラー内容に対する対処方法などをまとめていこうと思います。

今回のエラーはこちら

value += is not a member of Int

google翻訳すると「値+ =はIntのメンバーではありません」

これだと正直すぐ分かりませんね。

ちなみにscalaではインクリメント演算子がないため、数値を増分させたいなどの場合+=というメソッドを使用します。

んで、エラー内容の対処方法を結論から言うと、 増分させようとしている変数がvalで定義されているからvarにしてねということです。

確かにval定義されたフィールドは不変なので値の再代入はできないですし。

なぜこのようなエラーに直面したのかというと

メソッドで受け取った引数の値を増分させたかったからです。

コードは例ですが以下のような感じです。

object sample {

  def main(args: Array[String]): Unit = {
    val num = sample(0)
  }

  private def sample(target: Int): Int = {
    target += 1
  }
}

つまり、受け取った引数の変数はvalで定義されているということになります。

なのでScalaでは受け取った引数の値は変更できないことに注意してください。

ここら辺の内容って以下の参考書にでも載っているのかな?

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

  • 作者: Martin Odersky,Lex Spoon,Bill Venners,長尾高弘,羽生田栄一,水島宏太
  • 出版社/メーカー: インプレス
  • 発売日: 2016/09/20
  • メディア: Kindle版
  • この商品を含むブログを見る

今度ゆっくり調べようと思います。

以上