如何匹配Scala中的Char?

问题描述 投票:1回答:1

好的,所以这听起来像一个微不足道的问题。

  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): D!
(1): D!
(2): D!
(3): D!
(4): D!
(5): D!
(6): D!

我期待这个:

(0): a
(1): b
(2): c
(3): D!
(4): d
(5): e
(6): f

如何匹配Char值?

注意:如果我硬连线delim char“case”,'=>“,它会按预期工作!如果我使用Char-typed val,它为什么会破坏?

scala
1个回答
9
投票

你的模式匹配正在创建一个名为delim的第二个变量,它隐藏了第一个变量,并且由于一个新的和未加修饰的变量匹配所有内容,这是唯一被执行的case

使用back-tics告诉编译器匹配现有变量,而不是新变量。

  case `delim` =>
© www.soinside.com 2019 - 2024. All rights reserved.