3

我正在从 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

4

1 回答 1

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()
    }
}

这是因为它是其中atan的一个成员。Trigonometricfloat

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

于 2013-07-29T23:22:49.880 回答