zih*_*oyu 46 constructor scope scala immutability
有什么区别:
class Person(name: String, age: Int) {
def say = "My name is " + name + ", age " + age
}
Run Code Online (Sandbox Code Playgroud)
和
class Person(val name: String, val age: Int) {
def say = "My name is " + name + ", age " + age
}
Run Code Online (Sandbox Code Playgroud)
我可以将参数声明为vars,并在以后更改它们的值吗?例如,
class Person(var name: String, var age: Int) {
age = happyBirthday(5)
def happyBirthday(n: Int) {
println("happy " + n + " birthday")
n
}
}
Run Code Online (Sandbox Code Playgroud)
om-*_*nom 48
对于第一部分,答案是范围:
scala> class Person(name: String, age: Int) {
| def say = "My name is " + name + ", age " + age
| }
scala> val x = new Person("Hitman", 40)
scala> x.name
<console>:10: error: value name is not a member of Person
x.name
Run Code Online (Sandbox Code Playgroud)
如果您使用参数前缀val,则var它们将在课外显示,否则,它们将是私有的,您可以在上面的代码中看到.
是的,你可以改变var的值,就像通常一样.
Bri*_*new 10
这个
class Person(val name: String, val age: Int)
Run Code Online (Sandbox Code Playgroud)
使字段的用户可以在外部使用,例如,您可以稍后进行
val p = new Person("Bob", 23)
val n = p.name
Run Code Online (Sandbox Code Playgroud)
如果将args指定为var,则范围与for相同val,但字段是可变的.
如果您熟悉Java,可以从这个示例中获得想法:
class Person(name: String, age: Int)
Run Code Online (Sandbox Code Playgroud)
类似于
class Person {
public Person(String name, int age) {
}
}
Run Code Online (Sandbox Code Playgroud)
而
class Person(var name: String, var age: Int) // also we can use 'val'
Run Code Online (Sandbox Code Playgroud)
类似于
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Run Code Online (Sandbox Code Playgroud)
直觉是没有var/val,变量只能在构造函数中访问.如果添加了var/val,则该类将具有相同名称的成员变量.
| 归档时间: |
|
| 查看次数: |
27534 次 |
| 最近记录: |