scala 主建構函式 Scala 建構函式

2021-10-13 09:49:22 字數 2407 閱讀 7180

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的方法...