如何指定不需要其中一种类型的泛型类型?

时间:2016-11-26 07:19:19

标签: rust

我正在尝试使用通用数据类型,其中不需要其中一种类型(图中的边权重)。我一直在考虑使用never类型,这看起来像这样:

#![feature(never_type)]

struct Foo<T> {
    bar: T
}

impl<T> Foo<T> {
    fn foo(&mut self, bar: T) {
        self.bar = bar;
    }
}

fn main() {
    let mut foo: Foo<!> = Foo { bar: "nada" };
    foo.foo("nada");
}

这显然会导致"nada"占位符的类型不匹配,但只输入任何内容都会导致其他错误。 !是否在这里使用正确的类型,如果是,那么正确的语法是什么?

我已经使用()代替!来使用它,但我不确定这是否是正确的类型选择。我相信在效率方面它应该没有区别,因为()没有内存占用?

1 个答案:

答案 0 :(得分:5)

()是正确的选择。它是一个具有单个值的类型(也称为()),因此它有一个值,但不包含任何信息。

!没有任何值,所以如果你把它放在一个结构中,结构类型也没有值,并且基本上不可用。