如何使用ndarray初始化常量矩阵?

时间:2018-07-04 14:36:47

标签: rust

我想在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 | | ]);
  | |__^

1 个答案:

答案 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);
}

尽管如此,它要求您在使用变量之前先对其取消引用。