Ben adında bir enum Token
(ben kurmaya çalışıyorum tahmin edebiliyor: P)yapı bozma ederken Vec <Sıralama (dize)> yineleme
Böyle bir sürü kötü görünüyor:
enum Token {
Paren(String),
Number(String),
Name(String),
}
Şimdi, aşağıdaki imzası ile bir işlevi vardır:
fn tokenizer(input: String) -> Vec<Token>
Ben temelde çalışmıyor inanmak için hiçbir neden yok, bu yüzden Obvio usiller bir Vec<Token>
var.
bu:
let tokens = tokenizer("(add 44 5)".to_owned());
ve aşağıdaki gibi bir şey yapmak istiyorum:
let mut iter = tokens.iter();
while let Some(token) = iter.next() {
match token {
Token::Paren(p) => println!("Token::Paren({})", p),
Token::Number(p) => println!("Token::Number({})", p),
Token::Name(p) => println!("Token::Name({})", p),
}
}
Ama açıkçası ödünç denetleyici değil mi' Bu kadar kolay çıkmama izin ver.
Bunu yapmanın doğru yolu nedir? Açıkçası, bu projenin doğası gereği umduğum gibi, sadece Rust'u öğrenmeye çalışıyorum, bu yüzden herhangi bir tavsiye, doğrudan sorunla doğrudan ilgili olmasa bile yararlı olacaktır. =)
Kahramanım! Başka bir soru sorabilirsem, çünkü eşleşme bloğu içinde şablon eşleştirmesi yapıyoruz, bu bir harekete mi, bir kopyaya mı neden oluyor? Rust'a çok yeni geldim. =) –
Onları nasıl yakaladığınıza bağlıdır. Orijinaliniz harekete neden oluyordu (ya da onu hareket ettirmeye çalışıyordu) çünkü 'p' değeriyle yakalanıyordunuz. Ref'i kullanmak onu referans olarak yakalar ve bu nedenle taşımamaktadır. Burada düşünülecek başka şeyler de var, ancak sadece eşleme bloklarınız gerçek kod blokları haline geldikçe ve bunlara biraz karmaşıklık sağladıkça açıklamaya ihtiyaç duyacaklar. Dikkate alınması gereken başka bir şey de türünüzün 'Kopya' olup olmadığıdır .. ama yine de bunun hakkında daha sonra endişelenmeniz yeterlidir :) –
'Eşleme * belirteci {...} 'yazmak için deyimsel olarak kabul edilir. –