什么是相当于下面的斯卡拉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