Rust 如何返回常量值?
我想写一个小的阶乘库。请查看库主模块内的代码:Rust 如何返回常量值?,rust,Rust,我想写一个小的阶乘库。请查看库主模块内的代码: pub fn results() -> const [i8; 6] { [ 1, 1, 2, 6, 24, 120, //720 is too large for i8. ] } pub fn results() -> const [i32; 13] { [ 1, 1, 2,
pub fn results() -> const [i8; 6] { [
1,
1,
2,
6,
24,
120,
//720 is too large for i8.
] }
pub fn results() -> const [i32; 13] { [
1,
1,
2,
6,
24,
120,
720,
5_040,
40_320,
362_880,
3_628_800,
39_916_800,
479_001_600,
//6_227_020_800 is too large for i32.
] }
它为第一个函数的返回类型提供了以下错误:
错误:应为类型,找到关键字`const`
-->src/main.rs:1:21
|
1 | pub fn results()->const[i8;6]{[
| ^^^^^
< P> >目标是在编译时得到所有可能的阶乘值的数组。 < P>如果要返回不可变的变量,则必须省略<代码> const 。在鲁斯特中,变量默认是不可变的。这类似于在C++中声明所有的代码<代码> const < /C> >。
pub fn results() -> [i8; 6] {
unimplemented!()
}
有关更多信息,请参阅:
默认情况下,变量是不可变的。这是Rust为您提供的许多推动之一,可以让您以一种利用Rust提供的安全性和简单并发性的方式编写代码。但是,您仍然可以选择使变量可变。让我们来探讨Rust如何以及为什么鼓励您支持不可变性,以及为什么有时您可能蚂蚁选择退出
如果要在编译时对函数进行求值,则需要该功能,该功能仍在开发中。但是,它足够稳定,可以满足您的需要:
pub const fn results() -> [i8; 6] {
[1, 1, 2, 6, 24, 120] // 720 is too large for i8.
}
在编译时获取所有可能的阶乘值的数组
只需声明常量值:
pub const RESULTS_I8: [i8; 6] = [1, 1, 2, 6, 24, 120];
pub const RESULTS_I32: [i32; 13] = [
1,
1,
2,
6,
24,
120,
720,
5_040,
40_320,
362_880,
3_628_800,
39_916_800,
479_001_600,
];
根本没有理由涉及函数,因为不需要计算!你到底想解决什么问题?“我不能只定义结果常量,因为我会有多个同名常量,这是禁止的。”,什么?这些编译时常量包括所有内置整数的所有可能的阶乘结果。我想把它变成一个库,这样我就不必一次又一次地键入这些硬编码的值。为了适应生锈、货物和库。请补充你的问题,你不想返回
常量[i8;6]
但是让函数在编译时计算。我想使用函数以便可以推断类型。但是我想我会这样做,直到const fn
变得稳定。@TimonPaßlick类型可能被推断-什么类型的推断?这个答案中的显式类型与您建议的代码中的显式类型一样多。..ThaNK,我不知道。我习惯了C++类型的系统。