我想在ndarray
中有一个矩阵,作为可用于其他模块的常量。不幸的是,构造函数本身不是常数函数。有什么办法可以解决这个限制?
代码:
extern crate ndarray;
use ndarray::prelude::*;
const foo: Array2<f32> = arr2(&[
[1.26, 0.09], [0.79, 0.92]
]);
fn main() {
println!("{}", foo);
}
错误:
error[E0015]: calls in constants are limited to constant functions, tuple structs and tuple variants
--> src\main.rs:5:26
|
5 | const foo: Array2<f32> = arr2(&[
| __________________________^
6 | | [1.26, 0.09], [0.79, 0.92]
7 | | ]);
| |__^
答案 0 :(得分:4)
您可以声明一个不可变的静态变量而不是const(因为const仅在编译时求值),然后使用lazy-static,即
一个宏,用于在Rust中声明延迟评估的静态变量。
运行函数并设置静态变量。
示例:Playground
#[macro_use]
extern crate lazy_static; // 1.0.1;
pub mod a_mod {
lazy_static! {
pub static ref FOO : ::std::time::SystemTime = ::std::time::SystemTime::now();
}
}
fn main() {
println!("{:?}", *a_mod::foo);
}
尽管如此,它要求您在使用变量之前先对其取消引用。