如何从生命周期较短的字符串创建具有静态生命周期的路径?

时间:2021-01-21 17:24:02

标签: rust lifetime

我目前正在尝试实现一个内置于 Rust 的 shell 以供练习,我已经设法实现了大多数功能,但是,我目前正在尝试制作一个带有 path <arg1> <arg2> ... 的内置命令,并且将此添加到我的程序的路径变量中。但是,我有这样的设置,因为我有一个循环,它解析命令输入并生成一个命令变量作为 &str,其参数作为 Vec<&str> 形成我的命令结构。

对于这个内置命令 path,我需要获取参数并创建一个新的路径向量并替换现有路径。我当前的路径变量是在我的循环之外声明的,并且是一个 Vec<&Path>。我目前收到一个错误:

lifetime mismatch but data from `command` flows into `path` here

这是可以理解的,但我已经尝试将我的参数设置为 'static 生命周期,但是这失败了 borrowed value does not live long enough,因为我读取循环中的行并替换它并处理字符串到我的命令结构中。非常感谢您的帮助!

let line = stdin.lock().lines().next().unwrap().unwrap();
let split = line
       .split_whitespace()
       .enumerate()
       .filter(|&(i, _)| i > 0)
       .map(|(_, e)| e);
let args = split.collect::<Vec<&str>>();
// Command Struct
struct Program<'a> {
    command: &'a str,
    args: Vec<&'static str>,
}
// Dispatcher
fn dispatch_command<'a>(command: Program, path: &mut Vec<&Path>) -> Result<(), &'a str>

0 个答案:

没有答案