如何在Rust中导入和引用枚举类型?

14

如何从Rust标准库中导入和引用枚举类型?

我正在尝试使用位于std::sync::atomics模块中的Ordering枚举类型。 迄今为止,我的所有尝试都以失败告终:

use std::sync::atomics::AtomicBool;
use std::sync::atomics::Ordering;

// error unresolved import: there is no `Relaxed` in `std::sync::atomics::Ordering`
// use std::sync::atomics::Ordering::Relaxed;  

fn main() {
    let mut ab = AtomicBool::new(false);
    let val1 = ab.load(Ordering::Relaxed); // error: unresolved import:
                                           // there is no `Relaxed` in `std::sync::atomics::Ordering`
    println!("{:?}", val1);

    ab.store(true, Ordering.Relaxed);      // error: unresolved name `Ordering`
    let val2 = ab.load(Ordering(Relaxed)); // error: unresolved name `Relaxed`
    println!("{:?}", val2);    
}

我目前正在使用Rust v. 0.9。

2个回答

18

从Rust 1.0版本开始,枚举变量作用域被限制在它们所属的枚举类型内。它们可以直接使用 use

pub use self::Foo::{A, B};

pub enum Foo {
    A,
    B,
}

fn main() {
    let a = A;
}

或者您可以使用类型限定名称:

pub enum Foo {
    A,
    B,
}

fn main() {
    let a = Foo::A;
}

8

编者注:此答案早于Rust 1.0,不适用于Rust 1.0。

枚举变体在枚举内部没有作用域限制;因此它们是std::sync::atomics::Relaxed等等。

有作用域的枚举变量是问题10090的主题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接