小编c0d*_*1ne的帖子

为什么无法在 Rust 中声明静态或常量 std::path::Path 对象?

我正在开发 CLI 来进行学习。这个 CLI 涉及一个文件系统,我想在“文件系统”模块中声明一些公共和静态(或常量) Path 对象,以便板条箱中的其他模块可以在需要时使用它们。

我无法以一种满足我学究气的方式来宣布这些。我知道这是可以通过一些惰性求值技术来实现的,但这会将数据存储在堆上......鉴于路径在编译时已知,我根本不明白为什么我们不能将其存储为静态或常量值。

我确实理解Path::new 方法应该定义为pub **const** fn new()使其工作,但鉴于情况并非如此并且编译器建议使用Lazy::new(|| ...),我想即使路径是硬编码的,也无法对其进行评估是有原因的在编译时使用 static 或 const ...

请注意,我并不是在寻找涉及将路径存储为字符串或堆上的解决方法,而是寻找一种实现我想要的方法或解释为什么它无法实现的方法。

下面是一个片段,可以更好地说明我想要实现的目标,与编译器错误相关:

use std::path::Path;

static ROOT_DIR: &Path = Path::new("/myproject");
// static LOGS_DIR: &Path = ROOT_DIR.join("logs").as_path();


fn main() {
    println!("{}", ROOT_DIR.display());
    // println!("{}", LOGS_DIR.display());
}
Run Code Online (Sandbox Code Playgroud)
error[E0015]: cannot call non-const fn `Path::new::<str>` in statics
 --> src/main.rs:4:26
  |
4 | static ROOT_DIR: &Path = Path::new("/myproject");
  |                          ^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: calls in statics are limited to constant …
Run Code Online (Sandbox Code Playgroud)

static constants path rust

5
推荐指数
1
解决办法
1192
查看次数

标签 统计

constants ×1

path ×1

rust ×1

static ×1