fn parse(all_toks : Vec<Token>) -> ParseResult<Form> {
match all_toks {
[
Token::Key(String::from("ALL")),
Token::Id(a),
Token::Key(String::from(".")),
toks @ ..
] => {
let res = parse(toks);
let mkq = make_quant(
String::from("ALL"), a);
apfst(mkq, res)
}
}
}
再次在
String::from("ALL")
行中再次键入
let mkq =
,是否有一种方法使匹配模式是字面的和命名的变量? 类似(伪代码): match all_toks {
[
Token::Key(let x = String::from("ALL")),
Token::Id(a),
Token::Key(String::from(".")),
toks @ ..
] => {
or
match all_toks {
[
Token::Key(x),
Token::Id(a),
Token::Key(String::from(".")),
toks @ ..
] where (x==String::from("ALL")) => {
一般,是的:这就是
Token::Key(x @ "ALL")
即您用于..
的toks
是一种模式:它只是一种与所有内容相匹配的模式(a resttattern)。
,如果像您的代码一样,您的类型是
String
而不是&str
,那么您有一个不同的问题:模式无法匹配(当前),而String
不是模式中的有效语法。因此,您不能使用模式。