如何从类型别名中使用原始类型的方法?

时间:2014-05-23 15:52:55

标签: rust rust-0.11

问题可能有点抽象,但实际上我有一个相当简单的例子:

extern crate num;

use num::rational::Rational;

fn doit() -> Rational { Rational::new_raw(3, 5) }

我收到错误:

134:42 error: unresolved name `Rational::new_raw`.
fn doit() -> Rational { Rational::new_raw(3, 5) }
                        ^~~~~~~~~~~~~~~~~

因此,错误不在Rational本身(导入良好,其他地方没有问题),而是尝试使用Rational::new_raw。现在,从我们获得的文档:

type Rational = Ratio<int>;

impl<T: Clone + Integer + Ord> Ratio<T> {
    fn new_raw(numer: T, denom: T) -> Ratio<T>;
    // ...
}

这让我觉得应该是可能的,但不知何故......失败了。

我有一个解决方法(忘记我手边有别名):

fn doit() -> Rational { Ratio::<int>::new_raw(3, 5) }

但是创建别名的观点通常是为了避免担心它的实际表示,所以它有点烦人。

供参考,因为rust-0.11是移动目标:

$ rustc --version
rustc 0.11.0-pre-nightly (022a7b3 2014-05-22 01:06:25 -0700)
host: x86_64-unknown-linux-gnu

是否有正确的方法让这个工作,或者这被认为是一个错误?

1 个答案:

答案 0 :(得分:3)

这是(大部分)目前预期的行为:type实际上只是一个类型的别名,并且不允许调用静态方法。问题#6894#11047涵盖了这一点。