我是一名Javascript開發人員,正在尋找與Rust合作的遊戲。我讀過Rust編程語言,完成了這些教程,併成功將Rust添加到使用FFI的節點項目中。我想加快我寫的解析器,但認爲我錯過了一個基本的所有權概念。使用正則表達式結果的最佳模式是什麼?
當前的挑戰很簡單:評估一個已命名捕獲的正則表達式,並將該變量的值更改爲新捕獲的值。
我試過這十五種方法,使用unwrap
或嵌套Result
s和Option
s。它總是歸結爲「不夠長」的錯誤。
我最近的代碼如下所示:
let flag_re = compile_re(r"(?:\s*)([~])(?:\s*)(?P<FLAG>.)");
let mut flag : &str = "V";
for line in file.lines() {
let mut current_line : String = line.unwrap();
if flag_re.is_match(¤t_line) {
let new_flag = &flag_re.captures(¤t_line).unwrap().name("FLAG").unwrap().clone();
println!("old flag: {} new flag: {}",flag,new_flag);
flag = new_flag;
}
如果我註釋掉flag = new_flag
線這個偉大的工程。但是,一旦我嘗試給flag
分配一個值,我就會得到一個'活得不夠長'的變量current_line
。我得到那current_line
是短命的,所以我試過clone
和to_owned
沒有運氣,並導致我確信我對概念有一些誤解。
我嘗試使用此代碼創建此的防鏽操場:
fn main() {
let mut a: &str;
{
let b: &str = "B";
a = b;
}
println!("a: {} ",a);
}
但是(你不知道)這工作?所以請對這個Javascript小夥很溫柔。
謝謝。更改爲字符串的作品。我確實不得不使用:'flag = new_flag。** to_string()**。into();''我假設這是由於new_flag的乘積是一個&str。 – jdungan
更正:.to_string()是不必要的。注意new_flag賦值中的錯誤&。對不起,感到困惑,並再次感謝您的幫助。 – jdungan