首页 文章

什么是Rust类型关键字?

提问于
浏览
17

我在一些Rust示例中看到了关键字 type ,但我从未见过它的解释 . 我看到它如何使用的几个例子:

impl Add<Foo> for Bar {
    type Output = BarFoo;
    // omitted
}

这个,taken from the reference

type T = HashMap<i32,String>; // Type arguments used in a type expression
let  x = id::<i32>(10);       // Type arguments used in a call expression

有人可以解释这个关键字的作用吗?我在Rust by Example或Rust书中找不到它 .

1 回答

  • 20

    impl 之外的简单 type Foo = Bar; 定义了一个类型别名,并且是documented in The Book . 有一个通用版本 type Foo<T> = ... 但是如果你理解泛型,那么这是一个明显的扩展 .

    type 中的 type 定义了关联类型 . 它们是documented in The Book,但我已经写了一个简短的摘要,所以你也得到了:

    当你有像 Add 这样的特征时,你不仅要抽象出可以添加什么类型的东西,还要抽象它们的总和类型 . 添加整数会产生整数,添加浮点会导致浮点数 . 但是你不希望结果类型是 Add 的参数 Add ,原因我将在这里略过 .

    因此,该特征带有与 impl 相关联的类型 . 给定 Add 的任何实现,例如 impl Add<Foo> for Bar ,已经确定了相加结果的类型 . 这是在这样的特征中声明的:

    trait Add<Rhs> {
        type Result;
        // ...
    }
    

    然后所有实现都定义了结果的类型:

    impl Add<Foo> for Bar {
        type Result = BarPlusFoo;
        // ...
    }
    

相关问题