选项<t>其中T可以是两个不同的特征?</t>

时间:2014-04-20 10:13:18

标签: traits rust

如果我有两个不同的特征:

trait Foo {}
trait Bar {}

然后可以有一个Option可以是其中任何一个(当然也可以是None),例如:

struct FooBar {
  fb: Option<~Foo or Bar>
}

let fb1 = FooBar{fb: Some(~somestruct as ~Foo)}
let fb2 = FooBar{fb: Some(~otherstruct as ~Bar)}

并让他们都工作?

1 个答案:

答案 0 :(得分:4)

Option<T>没有什么特别之处;它只是这个,加上一些便利方法和一些文档:

pub enum Option<T> {
    Some(T),
    None,
}

记住这一点:它一直是枚举。你可以制作自己的枚举。它肯定是明确的,但要学会欣赏这是一件好事。

pub enum FooOrBar {
    Foo(~Foo),
    Bar(~Bar),
}

您可以制作Option<T>。或者,如果你能从中获得更好的语义含义,你可能更喜欢将两者融合在一起:

pub enum Something {
    Foozy(~Foo),
    Bark(~Bar),
    ADifferentVariant,
}