如果过去的选项在nom.rs中失败,如何停止解析其他选项?



目前我有2种方法:parse_intparse_string。它们分别返回一个数字或一个字符串。例如,如果我有解析器tuple((parse_int, parse_string)),那么它将把" 123 sdf"转换为(123, "sdf")。我实际的解析器看起来像tuple((parse_string, opt(parse_int), opt(parse_string)))。它将成功地将" dsf 123 sdf"转换为("dfs", Some(234), Some("sdf")),这很好。但是如果我输入"dfs sdf"作为输入,那么我们得到("dfs", None, Some("sdf")))。我希望它返回给我("dfs", None, None)),因为sdf不能转换为int。为了更好地理解,我正在制作一个命令参数解析器。

opt()中使用tuple(),将parse_intparse_string连接在一起:

tuple((parse_string, opt(tuple((parse_int, opt(parse_string))))))

它将产生(&str, Option<(int, Option<&str>)>)而不是(&str, Option<int>, Option<&str>)。如果需要,您可以使用map()来使其变平。

相关内容

  • 没有找到相关文章

最新更新