gpt4 book ai didi

rust - 如何将扩展方法添加到具有位于不同 crate 中的关联类型的特征?

转载 作者:行者123 更新时间:2023-11-29 08:00:09 25 4
gpt4 key购买 nike

我正在尝试向不同 crate 中的特征添加扩展方法。此特征具有指定的关联类型。

pub trait Test<W> {
type Error;

fn do_sth(&mut self) -> Result<W, Self::Error>;
}

为什么无法添加使用关联类型 Error 的方法?

impl dyn Test<u8> {
fn use_do_sth(&mut self) -> Result<u8: Self::Error> {
self.do_sth()
}
}

playground

最佳答案

当您需要向外部类型添加方法时,唯一的选择是使用扩展特征。这意味着您可以使用所需的任何方法定义自己的特征,并为所需的类型实现它。

当你需要向所有类型添加一个方法来实现一些外部特征时,你可以使用相同的模式,但不是直接列出类型,而是使用特征绑定(bind):

use std::fmt::Debug;

// This is an extension trait.
// You can force all its implementors to implement also some external trait,
// so that two trait bounds essentially collapse into one.
trait HelperTrait: Debug {
fn helper_method(&mut self);
}

// And this is the "blanket" implementation,
// covering all the types necessary.
impl<T> HelperTrait for T where T: Debug {
fn helper_method(&mut self) {
println!("{:?}", self);
}
}

Playground

如您所愿,同样的想法可以应用于任何外部特征。

关于rust - 如何将扩展方法添加到具有位于不同 crate 中的关联类型的特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157367/

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