为什么scala不会绑定我的字符串进行模式匹配?

时间:2016-04-30 02:42:32

标签: scala pattern-matching

我已经在这里发布了完整的代码,但您可能只使用我指出的行:

  rawModifiers.map(_.trim()).map {
    case str: String if str.startsWith("--") ⇒

      val substring = str.substring(2)
      val space = substring.indexOf(' ')

      (substring, space) match {        <------ nothing is bound yet here

          //This is where I have the problem. i gets set!!!

          case m@(full: String, i) if i > 0 ⇒ Seq(new ValModifier(full.take(i), full.substring(i)))
          case m@(part: String, _) ⇒ Seq(new FlagModifier(part))

      }
    case str: String if str.startsWith("-") ⇒

      val substring = str.substring(1)
      val space = substring.indexOf(' ')

      (substring, space) match {

          case m@(v: String, i) if i > 0 && v.length == 1 ⇒ Seq(new ValModifier(v.take(i), v.substring(i)))
          case m@(v: String, i) if i > 0 && v.length > 1  ⇒ throw new IllegalArgumentException()
          case m@(v: String, _) if v.length >= 1 ⇒ MultiFlagModifier(v)
          case _ ⇒ throw new IllegalArgumentException()
      }
    case _ ⇒ throw new IllegalArgumentException()
  } flatMap(x ⇒ x)

我尝试使用m@并且不使用m@来解决此问题的五种变体,最初使用Some(...)来包裹String所以我可以不对待它作为char数组等。同样的结果 - 无论如何,变量fullpart都是null!)

同样的事情发生在v下面。

忽略此声明: 分配变量val combo = (tuple)是否有效,如果我然后匹配,但为什么

奇怪的是,在这两种情况下,整数i都会被设置。所以有些奇怪的事情正在发生,但我根本不理解。

0 个答案:

没有答案