如何从Rust中的函数返回计算出的字符串?

时间:2019-07-01 18:51:32

标签: rust

我对Rust还是比较陌生,在其他论坛或SO中似乎找不到合适的答案。

我有一个字符串值,要作为命令行参数公开给我的程序。如果不可用,我想使用默认设置。默认值需要在运行时计算,因为它基于可执行路径。

因此,我整理了一些放入main方法中的逻辑。但是,为了更好地进行封装和测试,我希望将此逻辑移至单独的函数。

现在我已经完成了此操作,关于返回的新字符串,我遇到了cannot return value referencing temporary valuecannot return value referencing local variable之类的错误。

我不确定我要去哪里,为什么不知道,任何帮助将不胜感激。

fn get_command_filepath(command_arg: &str) -> Result<&str, Error> {
    // If the file is not available, it should be found
    // in the same directory as the executable.
    // This needs to be calculated at runtime.
    let command_default_path = std::env::current_exe().unwrap()
        .parent()
        .unwrap()
        .join("file.txt");
    let command_default: &str = command_default_path
        .to_str()
        .unwrap();
    Ok(if command_arg.is_empty() {
        &String::from(command_default)
    } else {
        command_arg
    })
}

1 个答案:

答案 0 :(得分:0)

我需要切换功能以使用String类型。

fn get_command_filepath(command_arg: String) -> Result<String, Error> {
    // If the file is not available, it should be found
    // in the same directory as the executable.
    // This needs to be calculated at runtime.
    let command_default_path = std::env::current_exe().unwrap()
        .parent()
        .unwrap()
        .join("file.txt");
    let command_default: &str = command_default_path
        .to_str()
        .unwrap()
        .to_owned();
    Ok(if command_arg.is_empty() {
        command_default.to_owned()
    } else {
        command_arg
    })
}

let command_file = get_command_filepath(opt.config).unwrap();