целое число простой функции ржавчины - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь запустить следующий исходный файл ржавчины как скрипт, используя cargo-script :

// cargo-deps: statistical

extern crate statistical;
use statistical::*;
fn main() {
    let alist = [10, 20, 30, 40, 50];
    println!("mean of list: {}", mean(&alist)); // not working
}

Однако я получаю следующую ошибку:

$ cargo script mystats.rs 
    Updating crates.io index
   Compiling mystats v0.1.0 (/home/abcde/.cargo/script-cache/file-mystats-6e38bab8b3f0569c)
error[E0277]: the trait bound `{integer}: num_traits::float::Float` is not satisfied
 --> mystats.rs:7:31
  |
7 |     println!("mean of list: {}", mean(&alist));  // not working
  |                                  ^^^^ the trait `num_traits::float::Float` is not implemented for `{integer}`
  |
  = help: the following implementations were found:
            <f32 as num_traits::float::Float>
            <f64 as num_traits::float::Float>
  = note: required by `statistical::mean`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: Could not compile `mystats`.

To learn more, run the command again with --verbose.
internal error: cargo failed with status 101

Как можно решить эту целочисленную / плавающую проблему?

1 Ответ

1 голос
/ 26 апреля 2019

Проблема в том, что функция mean хочет вернуть тот же тип, что и в срезе. Если бы он допускал целые числа, вы могли бы вычислить среднее значение [0, 1], и он вернул бы 0 (1/2 как целое число). Вот почему статистика заставляет вас использовать плавающие типы.

На моей машине работает следующее

// cargo-deps: statistical
extern crate statistical;
use statistical::*;

fn main() {
    let alist = [10, 20, 30, 40, 50];
    let alist_f64: Vec<f64> = alist.iter().map(|x| f64::from(*x)).collect();
    println!("mean of list: {}", mean(&alist_f64));
}

Это печатает это

mean of list: 30

Обратите внимание, что функция collect сделает копию массива. Было бы лучше, если бы средняя функция принимала итератор в качестве параметра, но, похоже, это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...