【发布时间】:2021-09-22 22:18:53
【问题描述】:
我有一个函数多次使用 ln(i),其中 i 是 u32。在此函数中,我在该函数中创建了一个向量,该向量设置为
let mut lns = vec![0.0f64; 2 as usize] ;
for i in 2 ..= max_ln as usize {
lns.push((i as f64).ln()) ;
}
前两个条目是 0.0,因此当我需要 ln(i) 时,我不需要继续调用 lns(i-1)。无论如何,这会在每次调用我的函数开始时完成。我只是想知道是否有一种方法可以生成一次并重用它(如果 max_ln 在调用之间发生变化,可以选择推送额外的值)。到目前为止,我想出的唯一选择是做
const LNS: [f64; 128] = [0.0f64,
0.0f64,
0.693147180559945f64,
1.09861228866811f64,
1.38629436111989f64,
1.6094379124341f64,
1.79175946922805f64,
等等。在文件的顶部,但这并不理想,因为我需要用常量值初始化它,而不是调用 ln()。
我曾看到人们使用 Lazy_Static crate 的类似情况,但希望能有更简单的东西,因为各个值永远不会改变。
谢谢
【问题讨论】:
-
认为除了硬编码值或使用惰性求值之外,唯一要做的就是使用
build.rs文件来生成硬编码列表,如本问答:In Rust, can I instantiate my const array without hard-coding in the values? Compile-time evaluation?跨度>
标签: rust lookup-tables