我已经在这里发布了完整的代码,但您可能只使用我指出的行:
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
数组等。同样的结果 - 无论如何,变量full
和part
都是null
!)。
同样的事情发生在v
下面。
忽略此声明:
分配变量 val combo = (tuple)
是否有效,如果我然后匹配,但为什么?
奇怪的是,在这两种情况下,整数i
都会被设置。所以有些奇怪的事情正在发生,但我根本不理解。