【问题标题】:"type annotations required" while using RustFFT使用 RustFFT 时“需要类型注释”
【发布时间】:2018-09-07 08:36:06
【问题描述】:

下面的代码有问题

extern crate num;
extern crate rustfft;

use rustfft::num_complex::Complex;
use rustfft::num_traits::Zero;

pub fn ct_fft(input: &Vec<f64>, sampling: u32) {
    let data_size = input.len();

    let mut input_array: Vec<Complex<f64>> = Vec::with_capacity(data_size);

    let fft = rustfft::FFTplanner::new(false).plan_fft(data_size as usize);

    for v in input {
        input_array.push(Complex { re: *v, im: 0.0 });
    }
}

我得到错误:

错误[E0283]:需要类型注释:无法解析`_:rustfft::FFTnum`
  --> src/ctdsp.rs:19:15
   |
19 |  让 fft = rustfft::FFTplanner::new(false).plan_fft(data_size as usize);
   |  ^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = 注意:`<:fftplanner>>::new` 需要

错误:由于先前的错误而中止

我不明白为什么会出现这个错误;我之前使用过 RustFFT,它没有任何问题,而且我使用它的方式完全相同。我找不到有关 RustFFT 的此错误的任何信息。



Rust 版本:

╰─$ rustc --version
rustc 1.26.0-nightly (9c9424de5 2018-03-27)

【问题讨论】:

  • 我不熟悉这个库,但我猜测:你从不使用 fft,或者(似乎)将它与任何其他类型联系起来。就像你写了vec![],但从来没有在里面放任何东西:编译器不知道你想使用什么类型。
  • 其实......当我处理数据时(fft.process(&amp;mut input_array, &amp;mut output_array);它开始正常工作......那么,rust可以找出类型表单上下文吗?
  • 类型推断的工作原理:从使用中推断类型。如果你不使用任何东西,编译器将无法使用任何东西。

标签: compiler-errors rust


【解决方案1】:

问题(来自您的 cmets)是您没有使用 fft。 Rust 可以推断类型,但只有在有足够的上下文时才能这样做。如果你从不使用fft,编译器没有足够的信息来计算出完整的类型应该是什么。

请记住,Rust 中的每个变量都有一个完整的类型。只是在某些情况下,Rust 可以自己解决它并让你省略类型。这不是其中一种情况。

【讨论】:

  • 谢谢,这澄清了很多。几年的 C 语言让我一蹶不振。我猜测最多的类型是 __auto_type 扩展...
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 2019-12-12
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
相关资源
最近更新 更多