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");