5

重複の可能性:
scala での def、val、および var の使用

私は今 Scala を学んでいますが、クラスで変数を変更することはできません。

class Person(name: String, var variable: Int) {
  def change() {
    variable = 42
  }
}
def person = new Person("name", 0)
println(person.variable)
person.change()
println(person.variable)

出力は次のとおりです。

0
0

出力に 0 の 2 回が含まれるのはなぜですか?

このコードの変数を変更するにはどうすればよいですか?

私は Scala バージョン 2.9.1 を持っています。

4

3 に答える 3

6

見つけるのは簡単ではありませんでした!ここ:

def person = new Person("name", 0)

。という名前のメソッドを定義しますperson。より明確にするために、次のようなことを行います。

def person(): Person = {
  return new Person("name", 0)
}

つまりperson、変数を参照しているのではなく、メソッドを呼び出して新しいインスタンスを何度も作成していると言うたびにです。

ただ言っval person =てください...そしてあなたは大丈夫でしょう。

信じられないかもしれませんが、それは実際には言語の特徴です。たとえばval、クラスにフィールド()を作成してから、に変更するだけで気が変わってゲッターに変えることができdefます。クライアントコードの観点からは、何も変わりません。

于 2012-11-01T20:59:30.720 に答える
0

コードを 1 つずつ分析してみましょう。まず、person というクラスを宣言しました。 class Person(name: String, var variable: Int) name と variable の 2 つのパラメータがあります。このクラスの下には、次のメソッドがありますdef change()

値が 42 の変数があります。次に、def change()メソッドを呼び出しましたperson.change()

これperson.change()は実際には var の値を変更するのではなく、実際にはvariableそれ自体でメソッドを呼び出しています。a を実行してみるprintln(person.change())と、「42」と出力されることがわかります。

class と def の違いをまだ理解していないのでしょう。の値を変更したい場合はclass Person、変更を呼び出すための新しい定義が必要です。

 class Person(name: String, var variable: Int) {
  println(variable)
}
def changePerson = Person("new value of name here", "new value of variable here");

を呼び出すと、defChangePerson渡した値が出力されます。

于 2012-11-02T08:19:18.003 に答える