gpt4 book ai didi

rust - 如何在编译时创建静态字符串

转载 作者:行者123 更新时间:2023-11-29 07:51:50 26 4
gpt4 key购买 nike

我想创建一个由重复的字符序列组成的长 &'static str,例如abcabcabc...

在 Rust 中有没有办法通过表达式来做到这一点,例如类似于 Python 中的 long_str = 1000 * "abc",还是我必须在 Python 中生成它并将其复制/粘贴到 Rust 代码中?

最佳答案

你不能在稳定的 Rust 中做这样的事情。据我对 Python 的了解,您的 1000 * "abc" 示例也未在 Python 的“编译时”运行。

包含一个文件

如果它必须是静态的,您可以使用 Cargo build script .这是一段 Rust 代码,可以在您的代码实际编译之前做很多事情。具体来说,您可以写出一个包含您的字符串的源文件,然后使用 include_str!把它放进你的箱子里:

build.rs

use std::{
env, error::Error, fs::File, io::{BufWriter, Write}, path::Path,
};

fn main() -> Result<(), Box<Error>> {
let out_dir = env::var("OUT_DIR")?;
let dest_path = Path::new(&out_dir).join("long_string.txt");
let mut f = BufWriter::new(File::create(&dest_path)?);

let long_string = "abc".repeat(100);
write!(f, "{}", long_string)?;

Ok(())
}

lib.rs

static LONG_STRING: &'static str = include_str!(concat!(env!("OUT_DIR"), "/long_string.txt"));

延迟初始化

您可以创建一个 once_celllazy_static将在运行时创建您的字符串的值,但只有一次。

use once_cell::sync::Lazy; // 1.5.2

static LONG_STR: Lazy<String> = Lazy::new(|| "abc".repeat(5000));

另见:

遥远的 future

在某个时候,RFC 911将得到全面落实。这一点,再加上一些额外的 RFC,每一个都增加了新的功能,将使您能够编写如下内容:

// Does not work yet!
static LONG_STR: String = "abc".repeat(1000);

关于rust - 如何在编译时创建静态字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50615494/

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