如果将枚举变量传递给函数,如何产生编译时错误

时间:2016-01-09 07:10:17

标签: enums rust

假设我有enum

enum Foobar {
    Foo(i32),
    Bar(f64)
}

我还有一个以Foobar为参数的函数:

fn foo(x: &mut Foobar) {
    match x {
        Foobar::Foo(i32) => { /* do something */ },
        Foobar::Bar(f64) => { /* panic */ }
    }
}

如果函数的调用者将Bar变量传递给函数而不使用编译器插件,是否可能抛出编译时错误?

1 个答案:

答案 0 :(得分:4)

没有

即使是编译器插件(我认为你的意思是" lint")也不能涵盖所有情况。

如果您想要将某个特定数据传递给该函数,那么请更改类型以使其实际无效:定义{{的兄弟姐妹1}}没有Foobar变体,以及两者之间的一些转换。

在Rust中没有简单或自动的方法来做到这一点;你只需做硬yakka。或者等待细化类型,但我不建议这样做。