據我瞭解,你想在一個範圍是每case
塊外定義一個新的變量:
case class data(record:String)
def x(input:String)= input match {
case "a" => val a = data("a")
case "b" => val b = data("b")
case anythingElse = val others = ...other object creation
}
x("a")
println(a) // should print data("a")
對不起?
這不行!因爲Scala「無法解析符號a」。它沒有在您使用它的範圍內定義。
相反,您可以使用某種數據容器(在外部作用域中定義)將其傳播到外部作用域。它可以是一個數組,一個變量或一個Map。但是,這也將使它成爲一個可變的容器。不建議。
更好的方法是從x()
方法實際返回狀態,然後使用該狀態。事情是這樣的:
case class Data(record: String)
val template: Map[String, Option[Data]] = List("a", "b", "c").map(_ -> None).toMap[String, Option[Data]]
def x(input: String): Map[String, Option[Data]] = input match {
case "a" => template + ("a" -> Some(Data("a")))
case "b" => template + ("b" -> Some(Data("b")))
case anythingElse => template + ("others" -> Some(Data("others")))
}
val returnMap = x("a")
for (x <- returnMap("a")) {
println(x)
}
OUTPUT:
Data(a)