Как вернуть постоянное значение? - PullRequest
0 голосов
/ 02 июля 2018

Я хочу написать небольшую факториальную библиотеку. Пожалуйста, посмотрите на код внутри основного модуля библиотеки:

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] { [
  |                     ^^^^^

Цель - получить массив всех возможных факторных значений во время компиляции.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

получить массив всех возможных факторных значений во время компиляции

Просто объявите постоянные значения:

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,
];

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1009*.

0 голосов
/ 02 июля 2018

Если вы хотите вернуть неизменяемую переменную, вы должны опустить const. В Rust переменные являются неизменяемыми по умолчанию. Это похоже на объявление всего const в C ++. Вы можете отказаться от этого с введением изменчивости.

pub fn results() -> [i8; 6] {
    unimplemented!()
}

Для получения дополнительной информации см. Официальную книгу :

По умолчанию переменные неизменны. Это одно из многих побуждений, которые дает Rust для написания кода таким образом, чтобы использовать преимущества безопасности и простого параллелизма, которые предлагает Rust. Тем не менее, у вас все еще есть возможность сделать ваши переменные изменяемыми. Давайте рассмотрим, как и почему Rust поощряет вас в пользу неизменности и почему иногда вы можете отказаться.

Если вы хотите, чтобы ваша функция оценивалась во время компиляции, вам нужна (в настоящее время) нестабильная функция const_fn. Вам нужен ночной компилятор для включения функций.

#![feature(const_fn)]

pub const fn results() -> [i8; 6] {
    unimplemented!()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...