我正在做一本“Pragmatic Bookshelf Programming Scala”一书中的所有例子。这是一个简单的单例示例,但我没有把它弄好,即没有获取map中的值。 你能指出错误。
class Marker(val color: String) {
println("Creating " + this)
override def toString(): String = "marker color is " + color
}
单身MarkerFactory如下
object MarkerFactory {
private val markers = new HashMap[String, Marker];
markers += "red" -> new Marker("red")
markers += "blue" -> new Marker("blue")
markers += "green" -> new Marker("green")
def getMarker(color: String) {
if (markers.contains(color)) markers(color) else null
}
def main(args: Array[String]) {
println(markers)
println((MarkerFactory getMarker "red").toString)
println(MarkerFactory getMarker "blue")
println(MarkerFactory getMarker "red")
println(MarkerFactory getMarker "yellow")
}
}
得到这样的输出。
Creating marker color is red
Creating marker color is blue
Creating marker color is green
Map(green -> marker color is green, red -> marker color is red, blue -> marker color is blue)
()
()
()
()
答案 0 :(得分:10)
对于返回Unit
的方法,使用不带等号的开括号是神秘的简写。 (()
是Unit
的唯一有效值,这就是您的代码打印()
的原因。)
def getMarker(color: String) {
if (markers.contains(color)) markers(color) else null
}
将其更改为
def getMarker(color: String) = {
if (markers.contains(color)) markers(color) else null
}
或者更好
def getMarker(color: String) = markers.getOrElse(color,null)