rust - 用于在 impl 语句上获取所需类型的模式匹配

标签 rust

我有这两种类型:

pub struct A;

pub struct B;

以下特征:

pub trait MyTrait {}

和一个免费的功能:

fn do_something(mut element: impl MyTrait) { ... }

我想根据 impl 背后的真实类型,根据当前函数调用中的元素类型做一些不同的事情。

// pseudo-snippet

match element {
    A => do something with A,
    B => do something with B
}

在 Rust 中是否可以确定 impl 语句背后的类型?或者,至少,根据 impl 制定一些基于决策的工作流程(if-else 分支、模式匹配...)?

最佳答案

实现此目的的方法是向 MyTrait 添加一个方法,它执行您想要的两种不同的操作,或者返回一个您可以匹配的 enum

pub trait MyTrait {
    fn do_something(self);
}

没有任何机制可以按照您的意思直接对具体类型进行分支。从技术上讲,您可以使用 std::any::TypeId 来实现它,但您不应该 — 因为您正在击败静态检查,这使得您的程序中的错误(未处理正确的类型集)有可能被延迟到运行时。相反,通过将功能放入 MyTrait,您的程序具有这样的属性:如果某些类型实现了 MyTrait,则必然定义什么 do_something 应该处理那个特征。

关于rust - 用于在 impl 语句上获取所需类型的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73871671/

相关文章:

reference - 有没有办法返回对函数中创建的变量的引用?

rust - 非引用类型是否总是满足“静态”的生命周期?

rust - 有没有办法在 Rust 的异步函数中获取对当前任务上下文的引用?

rust - 如何在Rust中从通用类型的借用数组创建HashSet?

rust - 是否可以构建&str引用环境变量的HashMap?

linker - Rust 无法将绑定(bind)链接到 C 库

linux - Rust 无法在 Linux 中编译为可执行文件

rust - 为什么我可以将 sort_by_key 与 Vec 一起使用?

Rust 中的嵌套常量

opengl - Rust 和 OpenGL 设置