gpt4 book ai didi

rust - impl TryFrom for Foo 与 impl From for Result 的优缺点是什么?

转载 作者:行者123 更新时间:2023-12-03 11:24:31 28 4
gpt4 key购买 nike

从 Rust 1.34 开始,我们可以通过实现 TryFrom 来编写类型之间的易错转换。特征:

struct Foo(i32);
struct Bar;

impl TryFrom<Bar> for Foo {
type Error = ();
fn try_from(_b: Bar) -> Result<Foo, ()> {
Ok(Foo(42))
}
}
在 Rust 1.41 中,孤儿规则已经放宽,所以我们也可以这样写:
struct Foo(i32);
struct Bar;

impl From<Bar> for Result<Foo, ()> {
fn from(_b: Bar) -> Result<Foo, ()> {
Ok(Foo(42))
}
}
根据 this trial这两种解决方案似乎同样有效。
采用一种或两种方法的优缺点是什么?两者如何选择?
这个问题对生态系统很重要。例如,一个 crate 编写者需要关于是否支持 TryFrom 的建议。 , From或两者。宏编写者需要知道它是否需要处理这两种情况等。这取决于当今生态系统的状态,不能轻易回答。

最佳答案

TryFrom ,错误是关联类型——它由类型 Bar 修复. From 不是这种情况,实际上你可以实现 From对于不止一种错误类型。除非你打算这样做(这很奇怪),否则你应该坚持 TryFrom .

关于rust - impl TryFrom<Bar> for Foo 与 impl From<Bar> for Result<Foo, ()> 的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62566447/

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