[英]How to return a const value?
我想寫一個小的階乘庫。 請看庫的主模塊里面的代碼:
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.
] }
對於第一個函數的返回類型,它給了我這個錯誤:
error: expected type, found keyword `const`
--> src/main.rs:1:21
|
1 | pub fn results() -> const [i8; 6] { [
| ^^^^^
目標是在編譯時獲得所有可能的階乘值的數組。
在編譯時獲取所有可能的階乘值的數組
只需聲明常量值:
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,
];
根本沒有理由涉及一個函數,因為不需要計算!
如果你想返回一個不可變的變量,你必須省略const
。 在 Rust 中,變量默認是不可變的。 這類似於在 C++ 中聲明所有內容為const
。 您可以通過引入可變性來選擇退出。
pub fn results() -> [i8; 6] {
unimplemented!()
}
有關更多信息,請參閱官方書籍:
默認情況下,變量是不可變的。 這是 Rust 為您提供的眾多推動之一,您可以利用 Rust 提供的安全性和簡單的並發性來編寫代碼。 但是,您仍然可以選擇使變量可變。 讓我們探討一下 Rust 如何以及為什么鼓勵您支持不變性,以及為什么有時您可能想要選擇退出。
如果您想在編譯時評估您的函數,您需要const_fn
功能,該功能仍在開發中。 但是,它足夠穩定,可以執行您想要的操作:
pub const fn results() -> [i8; 6] {
[1, 1, 2, 6, 24, 120] // 720 is too large for i8.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.