繁体   English   中英

如何在 Rust 中定义 BigUint 常量

[英]How to define BigUint const in Rust

我正在尝试为加密大(最多 8000 位)素数定义算术。 我为此使用num_bigint::BigUint 如何将我正在使用的质数定义为pub const

我尝试先将数字 2 定义为 const

pub const PRIME: BigUint =  BigUint{ data: [2].to_vec() };

但是to_vec是一个非常量 fn,同样适用于我可以用来定义 BigUint 的任何其他方法,例如BigUInt::new所以它会给我一个错误

error[E0015]: cannot call non-const fn `slice::<impl [u64]>::to_vec` in constants
  --> src/main.rs:44:46
   |
44 | pub const PRIME: BigUint =  BigUint{ data: [2].to_vec() };
   |                                              ^^^^^^^^
   |
   = note: calls in constants are limited to constant functions, tuple structs and tuple variants

不,这是不可能的。 创建一个向量需要分配,你不能在const上下文中进行分配。

但是,您应该使用lazy_static板条箱大致实现您想要的:

lazy_static! {
    static ref PRIME:BigUint = BigUint::new(vec![2]);
}

这实际上会在运行时创建数据,但它仍然表现得像一个不可变的静态。

游乐场中的示例代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM