如何匹配Scala中的字符?
好的,这听起来像是一个微不足道的问题如何匹配Scala中的字符?,scala,pattern-matching,Scala,Pattern Matching,好的,这听起来像是一个微不足道的问题 val delim = ',' val chars = "abc,def".toCharArray var i = 0 while (i < chars.length) { chars(i) match { case delim => println(s"($i): D!") case c => println(s"($i): $c") } i
val delim = ','
val chars = "abc,def".toCharArray
var i = 0
while (i < chars.length) {
chars(i) match {
case delim =>
println(s"($i): D!")
case c =>
println(s"($i): $c")
}
i += 1
}
我预料到:
(0): a
(1): b
(2): c
(3): D!
(4): d
(5): e
(6): f
如何匹配字符值
注意:如果我硬连接delim char“case”,则“=>”会按预期工作!如果我使用字符类型的val,它为什么会中断?您的模式匹配正在创建一个名为
delim
的第二个变量,该变量将第一个变量隐藏起来,并且由于一个新的未经修饰的变量匹配所有变量,因此这是唯一执行的情况
使用back tics告诉编译器匹配现有变量,而不是新变量
case `delim` =>
而且,final val Delim=','
,也可以工作。注意大写字母和最后一个。@LuisMiguelMejíaSuárez只要大写就足够了。所有的val
s都是最终的,您不需要添加它,它是多余的和令人困惑的。@Dima val并不意味着该字段是最终的。如果字段是final,则不能在子类中重写,而val可以是。@KrzysztofAtłasik是的,我假设这只是一个局部变量。@Dima在某些情况下,编译器要求val
为final,以便模式匹配它们。我相信(虽然不是100%确定)val可以被覆盖。所以,我总是用final,可能是
case `delim` =>