【发布时间】:2015-09-19 09:35:17
【问题描述】:
我是一名 Javascript 开发人员,希望通过 Rust 来提升我的游戏水平。我已阅读 Rust 编程语言,完成了教程,并成功地将 Rust 添加到使用 FFI 的节点项目中。我想加快我编写的解析器的速度,但我认为我缺少基本的所有权概念。
当前的挑战很简单:评估命名捕获的正则表达式并将变量的值更改为新的捕获值。
我已经使用unwrap 或嵌套Results 和Options 尝试了这十五种方法。它总是归结为“活得不够长”的错误。
我最近的代码如下所示:
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,但没有运气,这让我确信我对这些概念有一些误解。
我尝试使用以下代码在 Rust 操场上重新创建它:
fn main() {
let mut a: &str;
{
let b: &str = "B";
a = b;
}
println!("a: {} ",a);
}
但是(你不知道)这行得通吗?所以请对这个 Javascript 家伙温柔一点。
【问题讨论】: