是否可以在Rust中使用多种类型进行模式匹配?

ran*_*and 3 pattern-matching rust

好像你不能.如果没有,是否有计划支持添加它或运行时类型信息(RTTI)?

struct Bus;
struct Car;
struct Person;

fn main() {
    let x = Bus;
    //or more realistically, let x = function_with_multiple_return_types();

    match x {
        Car => {
            // ...
        }
        Bus => {
            // this gets executed
        }
        Person => {
            // ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个例子很简单.在现实生活中,只有x多种类型才有用.例如let x = function_with_multiple_return_types();.

She*_*ter 6

没有人能够100%准确,一个功能会或不会说永远实现,但我可以用100%的信念说,这将永远不会被执行.

这是为什么?因为提出的语法没有任何好处.Rust是一种静态类型的语言.这意味着编译器知道变量的类型是什么.任何分支Bus都不可能被执行.变量不可能有多种类型!为什么语言会改变以允许您添加永远不会被使用的代码?那不是很有用.

一般来说,匹配语句和模式匹配仅在存在多种可能的变体时才有用.这就是Rust的原因enum; 允许一组固定的动态选择(也就是在运行时制作).

如果你需要一套开放的动态决策,那就是特质(也许是专业化).甚至还有一个特性允许任何具体类型.


正如在评论中提到的,你可以使用特质对象向下转换是通过提供Any,但没有使用的能力match.

也可以看看: