未解决的导入:`std :: num`中没有`atan`

时间:2013-07-29 23:05:14

标签: rust

我正在构建Rust教程中的示例。当我尝试编译这个例子时:

use std::float;
use std::num::atan;
fn angle(vector: (float, float)) -> float {
    let pi = float::consts::pi;
    match vector {
      (0f, y) if y < 0f => 1.5 * pi,
      (0f, y) => 0.5 * pi,
      (x, y) => atan(y / x)
    }
}

我得到了名义错误。我正在使用rust build Test.rs进行编译。为什么编译器找不到std::num::atan

1 个答案:

答案 0 :(得分:3)

函数atan不是std::num的成员,因为它被定义为impl的一部分。但是,以下内容可行:

use std::float;

fn angle(vector: (float, float)) -> float {
    let pi = float::consts::pi;
    match vector {
      (0f, y) if y < 0f => 1.5 * pi,
      (0f, y) => 0.5 * pi,
      (x, y) => (y / x).atan()
    }
}

这是因为atanTrigonometric float实施的成员。

我认为,这个决定的原因是Rust中没有重载,所以为了将函数名应用于多个具体类型,它必须是Trait的一部分。在这种情况下,Trigonometric是一个数字特征,允许sincos的方法tanintfloat等的多个实现},f64