gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:28:27 27 4
gpt4 key购买 nike

我有这两种类型:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com