gpt4 book ai didi

static - 创建静态常量时出现内部编译器错误

转载 作者:行者123 更新时间:2023-11-29 08:03:12 27 4
gpt4 key购买 nike

我正在尝试通过匹配 env::home_dir 创建静态或常量:

static home: String = match env::home_dir() {
Some(ref p) => p.to_str().unwrap().to_owned(),
None => "./".to_string(),
};

但是我遇到了一个编译器错误:

src/main.rs:15:8: 15:13 error: internal compiler error: no enclosing scope found for scope: CodeExtent(346/Misc(20))
src/main.rs:15 Some(ref p) => p.to_str().unwrap().to_owned(),
^~~~~
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'Box<Any>', ../src/libsyntax/diagnostic.rs:175

这是我代码中的错误还是我应该报告此错误?是否可以将 home 作为常量或静态值获取?

我需要多次使用它来为某些文件操作添加一些文件名,我想将它们全部放在同一个文件夹中。

最佳答案

Is this a bug in my code

您的代码有一些不合理的地方,所以我猜这是一个错误。

should I report this bug?

可能吧。编译器不应该崩溃,它应该很好地向用户报告错误。不过,请先查看是否存在现有错误,如果存在则对其进行评论。

Is it possible to get home as constant or static value?

不完全是。 程序的整个长度都需要常量值。这意味着它们存在于 main 开始之前和 main 退出之后。对 env::home_dir() 的调用不可能满足该确切标准。

最直接的做法是获取一次值,然后将其传递到需要的地方。这使您可以避免多次获取该值:

fn main() {
let home = env::home_dir();
let home = home.as_ref().map(|d| d.as_path()).unwrap_or(Path::new("./"));

function_1(&home);
function_2(&home);
function_3(&home);
}

您也可以将它放入结构中,作为 &PathPathBuf:

struct Thing {
home: PathBuf,
}

fn main() {
let home = env::home_dir().unwrap_or_else(|| PathBuf::from("./"));
let t = Thing { home: home };

t.function_1();
t.function_2();
t.function_3();
}

这可能是我会做的。没有理由像静态值那样永远 保留分配的内存。

I need to use it multiple times to add some file names for some file operations and I want to have them all in same folder.

没有什么能阻止您简单地创建一个函数来放置逻辑:

fn safe_home_dir() -> PathBuf {
env::home_dir().unwrap_or_else(|| PathBuf::from("./"))
}

然后多次调用该函数即可。您可以分析它的成本,但我的直觉是这里不会有明显的缓慢。


如果您真的需要它是静态的,那么您可以使用 lazy_static crate .

关于static - 创建静态常量时出现内部编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35324692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com