什麼是相當於下面的斯卡拉Java代碼:斯卡拉構造
import java.util.Random;
public class Bool {
private boolean door;
Random random = new Random();
Bool() {
this.door = random.nextBoolean();
}
}
所以創建一個新的布爾對象時,門變量將自動獲得一個隨機的布爾值。
什麼是相當於下面的斯卡拉Java代碼:斯卡拉構造
import java.util.Random;
public class Bool {
private boolean door;
Random random = new Random();
Bool() {
this.door = random.nextBoolean();
}
}
所以創建一個新的布爾對象時,門變量將自動獲得一個隨機的布爾值。
在Scala中,類的主體等同於Java中的構造函數所調用的方法。因此,您的類看起來像下面這樣:
import java.util.Random
class Bool {
private val random = new Random
private val door = random.nextBoolean()
... // method definitions, etc.
}
(注意,是挑剔的,因爲你沒有申報的Java變量final
,人們可以說,該領域應var
這兒來代替。另外,您random
字段是包保護它看起來像一個疏忽,並會在Scala中被渲染爲protected[pkgName]
其中pkgName
是類包的最具體的組件的名稱)
越接近Scala代碼應該是:
class Bool {
var random = new Random
private var door = random.nextBoolean
}
即使公衆random
字段看起來不是一個好主意。
這是我的看法:
case class MyBool(door: Boolean = Random.nextBoolean)
這也開啓了可能性,創造MyBool
一個新實例具有一定的門值,例如:
val x1 = MyBool() // random door
val x2 = MyBool(true) // door set explicitly
由於只能有兩個不同門值,那麼使用靜態對象代替它是有意義的,如下所示:
sealed trait MyBool {
def door:Boolean
}
object MyBool {
case object True extends MyBool {
def door = true
}
case object False extends MyBool {
def door = false
}
def apply:MyBool = if(Random.nextBoolean) True else False
}
用法:
val x1 = MyBool() // random door value
val x2 = MyBool.True // explicit door value
+1模2過期的`case`和缺少`val` /`var`在第2行。 – Raphael 2011-02-14 18:30:33
雖然,`scala.util.Random`當然更可取。 :-) – 2011-02-14 19:00:00