gpt4 book ai didi

string - 在 Rust 中匹配 Option 静态字符串文字

转载 作者:行者123 更新时间:2023-11-29 08:27:02 28 4
gpt4 key购买 nike

<分区>

编辑:事实证明,Rust 编译器不够智能,无法传递有关变量是否静态定义的信息。在进行模式匹配时,编译器只知道它是一个字符串。

我正在尝试用 Rust 创建一个解析器,并且我已经定义了一个 Token 枚举。

pub enum Constant {
String(String),
}

pub enum Token {
KwIf,
KwThen,
KwElse,
Constant(Constant),
}

我还写了一个literal函数,重要的一点是这个函数返回静态字符串(即&'static str),因为性能原因(字符串也永远不会改变,因此它们在程序的整个生命周期中保持不变是有意义的。

impl Token {
pub fn literal(&self) -> Option<&'static str> {
match self {
&Token::KwIf => Some("if"),
&Token::KwThen => Some("then"),
&Token::KwElse => Some("else"),
_ => None,
}
}
}

我现在遇到的问题是,您将如何针对 literal 函数进行模式匹配,并使用 rust print! 函数直接打印文字字符串,即假设我写这样的东西

use Constant::*;
pub fn print_token(token: Token) {
match token.literal() {
Some(literal) => print!(literal);
None => match token {
Token::Constant(constant) => match constant {
String(string) => print!("{}", string),
_ => panic!("Unexpected token"),
}
}
}
}

问题是当我尝试打印这个文字时出现编译错误,即我得到的编译错误是错误:格式参数必须是字符串文字。我已经尝试了很多组合如何在不必将其转换为普通 String 的情况下打印静态字符串文字(这当然首先违背了使用静态字符串文字的目的)。

或者是否有更好的方法来解决我试图解决的问题,我正在为一种语言制作一个解析器,并且很快,我正在编写 token 以及解析器/打印机。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com