目前我有2种方法:parse_int
和parse_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_int
和parse_string
连接在一起:
tuple((parse_string, opt(tuple((parse_int, opt(parse_string))))))
它将产生(&str, Option<(int, Option<&str>)>)
而不是(&str, Option<int>, Option<&str>)
。如果需要,您可以使用map()
来使其变平。