scala建構函式
類由類成員(如字段和方法)組成。
字段儲存物件的狀態,並使用val或var定義。
方法完成物件的計算任務,並使用定義關鍵字def。
在scala中,類的整個主體是建構函式。
如果建構函式採用零引數,則可以省略引數列表。
scala區分用val欄位,var欄位,private val或private var宣告的建構函式和沒有varor val的字段。
引數宣告為val
如果構造函式引數宣告為val,scala只為它生成乙個getter方法。
讓我們宣告乙個欄位為val,如下所示:class book( val title:string)
因為建構函式欄位被定義為乙個val,所以該字段的值是不可變的。因此,scala只生成getter方法,沒有setter方法。object main {
def main(args: array[string]) {
class book( val title:string)
val book = new book("scala")
println(book);
println(book.title )
= "new title" //error
在scala中,如果建構函式或方法採用零引數,則可以省略引數列表。
引數宣告為var
如果構造函式引數宣告為var,scala將生成訪問器和mutator方法。class book( var title:string)
所以當你設定欄位時,像這樣book.title("new title")
我們可以改變book物件的字段,因為它是用關鍵字var宣告的。object main {
def main(args: array[string]) {
class book( var title:string)
val book = new book("beginning scala")
book.title = "new title"
println(book.title )
引數宣告為私有val或var
您可以將private關鍵字新增到val或var欄位,以防止getter和setter方法生成。
在這種情況下,字段只能從類的成員內訪問:class book(private var title: string) {
def printtitle {
println(title)
val book = new book("beginning scala")
println(book.printtitle )
引數宣告沒有val或var
當在構造函式引數上未指定val和var時,scala不生成getter或setter。
正如你在這裡可以看到的,你不能訪問書的字段標題。class book(title: string)
val book = new book("beginning scala")
//error
例子這裡是book類,乙個名為title的構造函式引數,預設值為「scala」。
因為引數使用預設值定義,您可以呼叫建構函式而不指定標題值:class book (val title: string = "scala")
val book = new book
book.title
您還可以在建立新圖書時指定所選的標題值:val book = new book("new title")
book.title
您還可以選擇提供命名引數,如以下**所示:val book = new book(title="beginning scala")
book.title
輔助建構函式
我們可以為類定義乙個或多個輔助建構函式,以提供建立物件的不同方法。
輔助建構函式通過建立名為this的方法來定義。
我們可以定義多個輔助建構函式,但它們必須有不同的簽名。
每個輔助建構函式必須以對先前定義的建構函式的呼叫開始。
以下**說明了乙個主建構函式和兩個輔助建構函式。class book (var title :string, var isbn: int) {
def this(title: string) {
this(title, 2222)
def this() {
this("css")
this.isbn = 1111
override def tostring = s"$title isbn- $isbn"
給定這些建構函式,可以通過以下方式建立同一本書:val book1 = new book
val book2 = new book("clojure")
val book3 = new book("scala", 3333)
輔助建構函式只需要呼叫先前定義的建構函式之一。
scala主構造器的多種玩法
scala主構造器的相關知識 class person class person2 class person3 defthis name string,age int class person4 val name string,val age int 也可以使用這種形態的主構造器 beanprope...
Scala12 Scala高階函式
scala混合了物件導向和函式式的特性,我們通常將可以作為引數傳遞到方法中的表示式叫做函式。在函式式程式語言中,函式是 頭等公民 高階函式包含 作為值的函式 匿名函式 閉包 柯里化等等。可以像任何其他資料型別一樣被傳遞和操作的函式。定義函式時格式 val 變數名 輸入引數型別和個數 函式實現和返回值...
Scala七 Scala核心一 函式
1.如果函式體只有一行 則可以不用寫 比如 def print x int println x 一行上的多條語句用分號隔開,則只有第一句屬於方法體,例如 def printwithvalue x int string println x abc 上面的 報錯,因為,printwithvalue的方法...