如何在Rust中将枚举用作值别名?

如何在Rust中将枚举用作值别名?,rust,Rust,在下面的代码中,如何使用Interval::Minute作为60 #[derive(Debug)] enum Interval { Minute = 60, Hour = 3600, Day = 86400, } fn main() { let interval = 120; let minute = Interval::Minute; println!("Number of minutes: {:?}", interval/minute);

在下面的代码中,如何使用
Interval::Minute
作为
60

#[derive(Debug)]
enum Interval {
    Minute = 60,
    Hour = 3600,
    Day = 86400,
}


fn main() {
    let interval = 120;
    let minute = Interval::Minute;
    println!("Number of minutes: {:?}", interval/minute);
}

也就是说,如何将其用作基础值的别名?

您可以将其强制转换为整数类型:

let minute = Interval::Minute as i32;
另一个选项是在模块中使用
const
s,具体取决于您尝试执行的操作:

mod interval {
    pub const MINUTE: i32 = 60;
}

fn main() {
    let interval = 120;
    let minute = interval::MINUTE;
    println!("Number of minutes: {:?}", interval/minute);
}

非常感谢。与使用int值
60
相比,
interval::MINUTE
不会增加开销(零成本抽象),这也是真的吗?@Greg什么抽象
interval::MINUTE
是一个整数。@Greg常量(
const
)在编译时被编译器内联到使用它们的地方,因此它们在内存中没有像局部变量那样的固定地址。我不知道你是不是在问这个。那就把事情弄清楚了,谢谢you@Shepmaster这个问题是不同的,因为理想的解决方案是使用
interval::MINUTE
vs
interval::MINUTE作为i32
您的字面问题是“如何使用枚举作为值”。这就是复制品。您碰巧了解了一个您喜欢的替代解决方案,这很好,但该解决方案与枚举无关。