gpt4 book ai didi

loops - 如何继续为 rust 中的每个循环迭代下一个字符

转载 作者:行者123 更新时间:2023-12-03 11:49:00 26 4
gpt4 key购买 nike

我正在编写一个简单的 token 生成器,它将从它的新函数中获取输入(希望将其取而代之以使用REPL),然后吐出与css语法关联的 token 。

这是一个例子:

#[derive(Debug)]
pub enum Token {
Selector,
LBrace,
RBrace,
Property,
Value,
}

#[derive(Debug)]
pub struct Tokenizer {
source: String,
tokens: Vec<(Token, String)>,
}

impl Tokenizer {
pub fn new(source: &str) -> Self {
let source = source.to_string();

for (i, c) in source.chars().enumerate() {
if c == '.' {
// This is where I am stuck.
}
}

Self {
source,
tokens: vec![],
}
}
}

fn main() {
let tokens = Tokenizer::new(".example{}");
println!("{:#?}", tokens);
}

现在我的问题是我要遍历下一个字符,直到遇到 #'space'.中的一个,但我不知道使用rust 如何使我保持迭代直到满足条件。有没有办法调用序列中的下一个字符?

另外,如果您确实对我所采取的指导方针的这段代码有任何疑问,请告诉我。谢谢你。

这是 rust playground的链接。

最佳答案

由于这是一个非常广泛的问题,因此我将引用servo's css-parser

可能会派上用场的一些功能:

  • skip_while 可以在开头满足特定谓词
  • 的情况下跳过元素
  • peekable 创建一个能够预见
  • 的迭代器

    除了处理迭代器,您还可以处理切片( &str)。这可能会更容易,因为(普通的)迭代器基本上可以让您一次访问一个元素,而切片则允许您根据需要来回移动(当然,在合理范围内)。

    关于loops - 如何继续为 rust 中的每个循环迭代下一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61371756/

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