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