Class Scala:如何通过方法修改类中的某些变量?

Class Scala:如何通过方法修改类中的某些变量?,class,scala,var,Class,Scala,Var,可能重复: 我现在正在学习Scala,我不能在课堂上修改变量 class-Person(名称:String,变量:Int){ def更改(){ 变量=42 } } def person=新人员(“姓名”,0) println(person.variable) 人事变动 println(person.variable) 输出为: 0 0 为什么输出包含2乘以0 如何修改此代码中的变量 我有Scala 2.9.1版。我也花了一段时间才意识到:) 您不是在定义val或var“person”,而是

可能重复:

我现在正在学习Scala,我不能在课堂上修改变量

class-Person(名称:String,变量:Int){
def更改(){
变量=42
}
}
def person=新人员(“姓名”,0)
println(person.variable)
人事变动
println(person.variable)
输出为:

0
0
为什么输出包含2乘以0

如何修改此代码中的变量


我有Scala 2.9.1版。

我也花了一段时间才意识到:)

您不是在定义
val
var
“person”,而是在创建一个新方法
person
。因此,每次调用
person
,它都会创建一个
person
的新实例,该实例的
变量总是设置为
0
。这是Scala中调用无参数方法不需要
()
的副作用

def person = new Person("foo", 1)
大致相当于(在Java代码中)

val person
是您想要的,即

Person person = new Person("foo", 1)
(当然这不是真正的
val
,因为Scala不支持这些:)

当您使用
person
时,Scala理解的是
person()


只需将用于定义方法的
def
更改为
val
var
,您就会没事了:)

不容易发现!在这里:

def person = new Person("name", 0)
您定义了一个名为
person
的方法。更清楚地说,您可以这样做:

def person(): Person = {
  return new Person("name", 0)
}
这意味着每次你说
person
你不是在引用一个变量,而是在一次又一次地调用一个方法和创建新实例

只要说
val person=
。。。你会没事的


信不信由你,这实际上是语言的一个特点。例如,您可以在类中创建一个字段(
val
),然后改变主意,只需更改为
def
,即可将其转化为getter。从客户端代码的角度来看,没有任何变化。

让我们逐个分析您的代码。 首先声明了一个名为person的类。
class-Person(名称:String,变量:Int)
有两个参数,名称和变量。 在这个类下,有一个名为:
defchange()
的方法

它有一个值为42的变量。 然后您通过
person.change()

这个
person.change()
实际上并没有改变var
变量的值,而是自己调用方法。
尝试执行
println(person.change())
,您将看到它将打印“42”

我想,你还是不明白class和def之间的区别。 如果要更改
类Person
的值,则需要一个新的def来调用更改

 class Person(name: String, var variable: Int) {
  println(variable)
}
def changePerson = Person("new value of name here", "new value of variable here");
现在调用
defChangePerson
,它现在将打印您传递给它的值。

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