Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分析时,Scala警告匹配可能不完整_Scala_Parsing - Fatal编程技术网

分析时,Scala警告匹配可能不完整

分析时,Scala警告匹配可能不完整,scala,parsing,Scala,Parsing,我听说@unchecked注解可以帮上忙。但是在这种情况下,我应该把它放在哪里?这里的问题是,使用(“+”|“-”)创建的解析器只接受两个可能的字符串。但是,当您映射结果解析器以提取值时,您要提取的结果将只是String 在模式匹配中,只有字符串“+”和“-”的大小写,但编译器无法知道这些是唯一可能出现的字符串,因此它在这里告诉您,您的匹配可能不是穷尽的,因为它无法更好地知道 您可以使用未经检查的注释来抑制警告,但有更好、更惯用的方法来消除此问题。解决这个问题的一种方法是尽快用某种结构化类型替换

我听说@unchecked注解可以帮上忙。但是在这种情况下,我应该把它放在哪里?

这里的问题是,使用
(“+”|“-”)
创建的解析器只接受两个可能的字符串。但是,当您映射结果解析器以提取值时,您要提取的结果将只是
String

在模式匹配中,只有字符串“+”和“-”的大小写,但编译器无法知道这些是唯一可能出现的字符串,因此它在这里告诉您,您的匹配可能不是穷尽的,因为它无法更好地知道

您可以使用未经检查的注释来抑制警告,但有更好、更惯用的方法来消除此问题。解决这个问题的一种方法是尽快用某种结构化类型替换这些字符串。例如,创建一个ADT

warning: match may not be exhaustive.
It would fail on the following input: ~((x: String forSome x not in ("+", "-")), _)
      ("+" | "-") ~ term ^^ {
                            ^
one warning found            

现在它应该能够认识到,唯一可能的情况是
加上
这里的问题是,使用
(“+”|“-”)
创建的解析器只接受两个可能的字符串。但是,当您映射结果解析器以提取值时,您要提取的结果将只是
String

在模式匹配中,只有字符串“+”和“-”的大小写,但编译器无法知道这些是唯一可能出现的字符串,因此它在这里告诉您,您的匹配可能不是穷尽的,因为它无法更好地知道

您可以使用未经检查的注释来抑制警告,但有更好、更惯用的方法来消除此问题。解决这个问题的一种方法是尽快用某种结构化类型替换这些字符串。例如,创建一个ADT

warning: match may not be exhaustive.
It would fail on the following input: ~((x: String forSome x not in ("+", "-")), _)
      ("+" | "-") ~ term ^^ {
                            ^
one warning found            

现在,它应该能够认识到,唯一可能的情况是
加上
减上

添加一个案例来删除警告

sealed trait Operation
case object Plus extends Operation
case object Minus extends Operation

//then in your parser
("+" ^^^ Plus | "-" ^^^ Minus) ~ term ^^ {
  case PLus ~ t => t
  case Minus ~ t  => -t
}
类ExprParser扩展了regexparser{
val number=“[0-9]+”。r
def expr:Parser[Int]=term~rep(
(“+”|“-”)术语^{
案例“+”~t=>t
大小写“-”~t=>-t
案例t=>t
})^^{case t~r=>t+r.sum}
定义术语:解析器[Int]=factor~(“*”~factor)*)^{
案例f~r=>f*r.map(u._2).product
}

def factor:Parser[Int]=number^^{{uu.toInt}}|“(“~>expr添加大小写以删除警告

sealed trait Operation
case object Plus extends Operation
case object Minus extends Operation

//then in your parser
("+" ^^^ Plus | "-" ^^^ Minus) ~ term ^^ {
  case PLus ~ t => t
  case Minus ~ t  => -t
}
类ExprParser扩展了regexparser{
val number=“[0-9]+”。r
def expr:Parser[Int]=term~rep(
(“+”|“-”)术语^{
案例“+”~t=>t
大小写“-”~t=>-t
案例t=>t
})^^{case t~r=>t+r.sum}
定义术语:解析器[Int]=factor~(“*”~factor)*)^{
案例f~r=>f*r.map(u._2).product
}
def factor:Parser[Int]=number^^{{{uu.toInt}}}|“(“~>expr