簡體   English   中英

如何返回一個常量值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM