如何才能使此代码段更有效?
v match {
case y @ A(x) =>
val x = if (mapping.contains(y))
mapping.get(y)
else
v
x match {
case y @ A(i) =>
lookup(y)
}
}
我觉得使用两个模式匹配器可以通过声明一个val来检索mapping.get(y),但每次我尝试这样做时都会得到一个非法的简单表达式错误:
v match {
case y @ A(x) =>
val x = if (mapping.contains(y))
val x = mapping.get(y) //Causes an error
lookup(x)
else
v
}
答案 0 :(得分:3)
我认为mapping
是Map
?如果是,请使用getOrElse
:
val x = mapping.getOrElse(y, v)
在第二个代码块中,您需要在if
内的两个语句周围使用大括号。
但是你的代码没有多大意义。原因如下:
case y @ A(x)
,它为x
分配了一个值。但是,紧接着,你有x=
,这意味着你分配一个全新的x
,遮蔽了旧的{.1}。case y @ A(i)
,但不使用i
。match
语句都没有多个case
。如果匹配失败,这将导致运行时错误。但如果你知道它不会失败,那么这场比赛并不是真的有用。 答案 1 :(得分:2)
考虑
mapping.getOrElse(y,v) match {
case z @ A(i) => lookup(z)
case _ => somethingElse
}