所以我目前正在研究一種新的編程語言tr-lang
我目前正在撰寫語言的決議器
這段代碼是錯誤所在
BlockToken::?se(bip) => {
let ise = &mut parsed[bip]; // Access method 1
match ise.typ {
TokenType::?se ( mut yoksa ) => {
yoksa = Some(ip);
},
TokenType::Yoksa ( mut tp ) => {
tp = Some(ip);
},
_ => unreachable!(),
}
ip 1
},
BlockToken::?ken(bip) => {
let iken = parsed.get_mut(bip).unwrap(); // Trying other access methods
match iken.typ {
TokenType::?ken ( mut yoksa ) => {
yoksa = Some(ip 1);
},
_ => unreachable!(),
}
bip
},
_ => unimplemented!(),
};
這是決議并生成可執行程式的代碼的一部分
它給出了一些警告,但我認為問題在于這些:
warning: variable `yoksa` is assigned to, but never used
--> src/parser/parser.rs:121:54
|
121 | ... TokenType::?se ( mut yoksa ) => {
| ^^^^^
|
= note: consider using `_yoksa` instead
warning: value assigned to `yoksa` is never read
--> src/parser/parser.rs:122:37
|
122 | ... yoksa = Some(ip);
| ^^^^^
|
= help: maybe it is overwritten before being read?
warning: variable `tp` is assigned to, but never used
--> src/parser/parser.rs:124:56
|
124 | ... TokenType::Yoksa ( mut tp ) => {
| ^^
|
= note: consider using `_tp` instead
warning: value assigned to `tp` is never read
--> src/parser/parser.rs:125:37
|
125 | ... tp = Some(ip);
| ^^
|
= help: maybe it is overwritten before being read?
warning: variable `yoksa` is assigned to, but never used
--> src/parser/parser.rs:134:55
|
134 | ... TokenType::?ken ( mut yoksa ) => {
| ^^^^^
|
= note: consider using `_yoksa` instead
warning: value assigned to `yoksa` is never read
--> src/parser/parser.rs:135:37
|
135 | ... yoksa = Some(ip 1);
| ^^^^^
|
= help: maybe it is overwritten before being read?
正如您所看到的,由于某種原因,即使我像往常一樣模式匹配,當我嘗試將值設定為其他值時,它也會將變數視為不同的
而不是改變 yoksa/tp 的值,最終結果不會改變任何東西
我嘗試改變我訪問 ise/iken 的方式但是它沒有改變任何我也嘗試使用if let而不是match
它不會改變 ise.typ.yoksa 或 ise.typ.tp 的值
額外資訊 BlockToken 是這個列舉
enum BlockToken {
?se(usize),
?ken(usize),
?kiNoktaNokta(usize),
}
令牌是這個結構
struct Token {
pub typ: TokenType,
pub line: usize,
pub col: usize,
}
我想要的是能夠更改列舉結構 ?se、?ken 和 Yoksa 的內容
盡管首選安全方法,但它可能不安全
uj5u.com熱心網友回復:
用于Option::replace將新值放入可變選項中:
yoksa.replace(ip 1);
你也可能想要一個可變參考:
TokenType::?ken(ref mut yoksa)
uj5u.com熱心網友回復:
我認為您需要在匹配時匹配一個可變參考,否則您只是在創建一個區域變數并對其進行變異。
例如這段代碼:
#[derive(Debug)]
enum Blah {
A(u64),
}
mod test {
use crate::refmatch::Blah;
#[test]
fn test_match() {
let mut a = Blah::A(23);
println!("{:?}", a);
match a {
Blah::A(ref mut x) => *x = 5,
}
println!("{:?}", a);
}
}
將輸出:
running 1 test
A(23)
A(5)
如果你用cargo test -- --nocapture.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327452.html
上一篇:如何在vue3compositionAPI上定義指令?
下一篇:在C 中決議輸入以進行競爭性編程
