2016-08-23 54 views
0

下面的類拒絕編譯初始化場:如何通過調用方法

class InitTest { // Class 'InitTest' must either be declared abstract 
       // or implement abstract member 'v: Int' 

    var v: Int 

    def int(v : Int) = { 
    this.v = v 
    } 
} 

我是種驚喜的是,我們不能離開值「初始化」。在Java中,它將被分配到null。在斯卡拉,它不會編譯。如何在Scala中做到這一點?

回答

2

你可以這樣做:

class InitTest { 
    var v: Int = _ 
    def int(v : Int) = { 
    this.v = v 
    } 
} 

由於v有一個值類型,沒有分配null它的方式。但是,Scala允許您使用_來表示「歸零」值。對於數字,這是零和指針是null。表示未初始化值的好方法。

+0

但是分配'_'是什麼意思? – stella

+0

@stella看到這個主題http://stackoverflow.com/questions/8336640/in-scala-what-exactly-does-val-a-a-underscore-mean – ccheneson