似乎您不能.如果没有,是否有计划添加它或运行时类型信息(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 => {
            // ...
        }
    }
}

这个例子微不足道.如果它在现实生活中有多种用途的话.e、 g.let x = function_with_multiple_return_types();.

推荐答案

没有人能百分之百准确地说一个功能会或不会被实现,但我可以百分之百地相信这永远不会被实现.

为什么?因为提议的语法没有任何好处. rust 是一种statically-typed语言.这意味着编译器需要知道变量的类型.除了Bus个分支之外,任何分支都不可能被处决.一个变量不可能有多个类型!为什么语言会改变,允许您添加永远无法使用的代码?那没有多大用处.

match语句和模式匹配通常只有在存在多个可能的变体时才有用.这就是为什么 rust 有enum个;允许一组固定的动态 Select (即在运行时做出的 Select ).

如果你需要一套开放的动态决策,这就是trait (也许还有专业化)的作用.甚至还有一种trait 可以容纳any concrete type人.


作为mentioned in the comments,你可以使用Any提供的trait object downcasting,但不能使用match.

另见:

Rust相关问答推荐

如何在tauri—leptos应用程序中监听后端值的变化?""

为什么要在WASM库中查看Rust函数需要`#[no_mangle]`?

如何创建引用构造函数拥有的变量的对象?

有没有办法在Rust中配置常量变量的值?

捕获FnMut闭包的时间不够长

S,一般性状和联想型性状有什么不同?

告诉Rust编译器返回值不包含构造函数中提供的引用

将特征与具有生命周期的关联类型一起使用时的生命周期方差问题

仅在使用 &mut 或线程时borrow 的数据在闭包之外转义?

Rust:为什么 Pin 必须持有指针?

Rust 为什么被视为borrow ?

Rust中的位移操作对范围有什么影响?

如何在 Rust 中按 char 对字符串向量进行排序?

为什么在 rust 中删除 vec 之前应该删除元素

如何在 Rust 中返回通用 struct

为实现特征的所有类型实现显示

当用作函数参数时,不强制执行与绑定的关联类型

在 Rust 中枚举字符串的最佳方式? (字符()与 as_bytes())

如何用另一个变量向量置换 rust simd 向量?

为什么我不能为 Display+Debug 的泛型类型实现 std::error::Error 但有一个不是泛型参数的类型?