假设我正在尝试编写一个简单的井字游戏。它有一个 M x N 字段。游戏只有一个字段,因此它可能应该用单例来表示object
。像这样:
object Field {
val height : Int = 20
val width : Int = 15
...
}
但我不想对高度和宽度进行硬编码,因此如果可以在运行时通过构造函数或其他方式将它们传递给对象,那就太好了。但object
s 不能有构造函数。
嗯,我可以改变height
and width
to be var
s,而不是val
s并引入一种新方法
def reconfigure (h:Int, w:Int) = {
height = h
width = w
}
并在游戏开始时调用它。但它也不优雅。
那么,有没有一种巧妙的方法可以做到这一点 - 即拥有对象val
使用运行前未知的值初始化?
您可以使用惰性值。如果您仍然需要使用 var,这可能会使事情变得更加复杂。
case class Config( height: Int, width: Int )
object Field {
val defaultConfig = Config( 20, 15 )
var config: Option[Config] = None
def getConfig = config.getOrElse( defaultConfig )
lazy val height = getConfig.height
lazy val width = getConfig.width
}
object Main extends App {
Field.config = Some( Config( 30, 25 ) )
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)