【发布时间】:2016-02-26 02:37:57
【问题描述】:
我有时会看到类似下面的内容。
class Test(val str: String){
}
虽然我用val 编写了一些示例代码,但我看不出普通声明和val 的方式有什么区别。
它们之间有什么区别? 什么时候使用?
【问题讨论】:
标签: scala
我有时会看到类似下面的内容。
class Test(val str: String){
}
虽然我用val 编写了一些示例代码,但我看不出普通声明和val 的方式有什么区别。
它们之间有什么区别? 什么时候使用?
【问题讨论】:
标签: scala
如果您添加val,您的变量将从课堂外可见。
// 'name' is a val
class Person(val name: String)
val p = new Person("Alvin Alexander")
p.name // String = Alvin Alexander
p.name = "Fred Flintstone" // error: reassignment to val
// 'name' is neither var or val
class Person(name: String)
val p = new Person("Alvin Alexander")
p.name // error: value name is not a member of Person
代码取自http://alvinalexander.com/scala/scala-class-examples-constructors-case-classes-parameters
【讨论】:
通过添加到@EntryLevelDev 的答案,您可以使用javap 来查看实际发生的情况。
1.scala
class Test(val str: String){
}
第 1 步。 scalac 1.scala
第二步。 javap测试
从“1.scala”编译
public class Test {
public java.lang.String str();
public Test(java.lang.String);
}
2.scala:
class Test2(str: String){
}
第 1 步。 scalac 2.scala
第二步。 javap测试2
从“1.scala”编译
public class Test1 {
public Test1(java.lang.String);
}
所以当你添加 val 时,scala 会通过参数的名称生成一个方法,并公开,以便从外部可见。
【讨论】: