Iva*_*van 44 scala pattern-matching switch-statement
我发现自己陷入了一件非常微不足道的事情: - ]
我有一个枚举:
object Eny extends Enumeration {
type Eny = Value
val FOO, BAR, WOOZLE, DOOZLE = Value
}
Run Code Online (Sandbox Code Playgroud)
在代码中,我必须将它有条件地转换为数字(varianr-number对应关系因上下文而异).我写:
val en = BAR
val num = en match {
case FOO => 4
case BAR => 5
case WOOZLE => 6
case DOOZLE => 7
}
Run Code Online (Sandbox Code Playgroud)
这给了我每个分支的"无法访问代码"编译器错误,但无论第一个是什么(在这种情况下"情况FOO => 4").我究竟做错了什么?
Dan*_*ral 60
我怀疑你实际使用的代码不是FOO,但是foo,小写,这将导致Scala只分配值foo,而不是将值与它进行比较.
换一种说法:
x match {
case A => // compare x to A, because of the uppercase
case b => // assign x to b
case `b` => // compare x to b, because of the backtick
}
Run Code Online (Sandbox Code Playgroud)
以下代码对我来说很好:它产生6
object Eny extends Enumeration {
type Eny = Value
val FOO, BAR, WOOZLE, DOOZLE = Value
}
import Eny._
class EnumTest {
def doit(en: Eny) = {
val num = en match {
case FOO => 4
case BAR => 5
case WOOZLE => 6
case DOOZLE => 7
}
num
}
}
object EnumTest {
def main(args: Array[String]) = {
println("" + new EnumTest().doit(WOOZLE))
}
}
Run Code Online (Sandbox Code Playgroud)
你能说出这与你的问题有什么不同吗?
| 归档时间: |
|
| 查看次数: |
52157 次 |
| 最近记录: |