2016-02-26 79 views
1

我有時會看到類似下面的東西。Scala中class參數的val是什麼?

class Test(val str: String){ 
} 

我寫了一些示例代碼val不過,我看不出有共同宣言,並與val的方式有什麼區別。

他們有什麼區別? 什麼時候應該使用它?

回答

6

如果添加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

更多信息scala class constructor parameters

2

被帶到通過增加@ EntryLevelDev的回答,您可以使用javap,看看到底發生了什麼。

1.scala

class Test(val str: String){ 
} 

第一步。 scalac 1.scala

step2。 javap的測試

從 「1.scala」

public class Test { 
    public java.lang.String str(); 
    public Test(java.lang.String); 
} 

2.scala編譯:

class Test2(str: String){ 
    } 

第一步。 scalac 2.scala

step2。 javap的Test2的

從「1.scala」

public class Test1 { 
    public Test1(java.lang.String); 
} 

編譯所以,當你添加VAL,斯卡拉生成由參數的名稱的方法,並公之於衆,以便從外部可見。