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

Enums 如果将枚举变量传递给函数,如何产生编译时错误,enums,rust,Enums,Rust,假设我有一个枚举: enum Foobar { Foo(i32), Bar(f64) } 我还有一个函数,它将Foobar作为参数: fn foo(x: &mut Foobar) { match x { Foobar::Foo(i32) => { /* do something */ }, Foobar::Bar(f64) => { /* panic */ } } } 如果函数的调用方将Bar变量传递给函数,

假设我有一个
枚举

enum Foobar {
    Foo(i32),
    Bar(f64)
}
我还有一个函数,它将
Foobar
作为参数:

fn foo(x: &mut Foobar) {
    match x {
        Foobar::Foo(i32) => { /* do something */ },
        Foobar::Bar(f64) => { /* panic */ }
    }
}
如果函数的调用方将
Bar
变量传递给函数,而不使用编译器插件,是否可能引发编译时错误?

即使是一个编译器插件(我想你的意思是“lint”)也不可能涵盖所有情况

如果希望静态地不可能将特定数据段传递给函数,请更改类型,使其实际上无效:定义一个不具有
Bar
变量的
Foobar
同级,以及两者之间的一些转换


在生锈的情况下,没有简单或自动的方法可以做到这一点;你只需要做艰苦的雅卡。或者等待细化类型,但我不建议这样做。

在这种情况下,我只能无所事事或惊慌失措,因为我是该函数的唯一用户。谢谢您的帮助。@pengowen123如果您是该函数的唯一用户,您可以将Foo和Bar设置为两个独立的结构,并在您想要接受其中任何一个时定义一个枚举,就像这样,我使用
enum
来存储稍微不同类型的向量。是否可以像您的示例中那样,但作为
enum
上的一种方法?@pengowen123如果您想回复某人,您应该在开始时提到他们的名字,否则他们可能永远不会知道。我不知道你到底想要什么,但我不这么认为。一个
Vec
只能有一种元素类型,可能是枚举,枚举不能假定一个变量或另一个变量未被使用。