< 返回版块

uno 发表于 2020-12-09 18:19

Tags:trait,方法调用

trait TA {
    fn handle(data: u8) -> u8;
}

trait TB {
    fn convert(tr: impl TA) -> u8;
}

struct SA;

impl TB for SA{
    fn convert(tr: impl TA) -> u8 {
        // 这里怎样才能调用trait TA的handle方法呢?
    }
}

或者说我应该怎样用更Rust的方式去实现这样的功能呢

评论区

写评论
作者 uno 2020-12-10 11:54

明白了,谢谢大佬

--
👇
AbdyCjen: 补充使用范型参数的代码

trait TA {
    fn handle(data: u8) -> u8;
}

trait TB {
    fn convert<T: TA> (tr: T) -> u8;
}

struct SA;

impl TB for SA{
    fn convert<T: TA>(_: T) -> u8 {
		<T as TA>::handle(0)
    }
}

--
👇
AbdyCjen: 不太明白为啥要这么写,在参数位置使用impl Trait和使用范型参数实际作用是一样的, 但是前者不能显式的标明类型,而后者想要实现这个目的就很简单了;

AbdyCjen 2020-12-10 02:42

补充使用范型参数的代码

trait TA {
    fn handle(data: u8) -> u8;
}

trait TB {
    fn convert<T: TA> (tr: T) -> u8;
}

struct SA;

impl TB for SA{
    fn convert<T: TA>(_: T) -> u8 {
		<T as TA>::handle(0)
    }
}

--
👇
AbdyCjen: 不太明白为啥要这么写,在参数位置使用impl Trait和使用范型参数实际作用是一样的, 但是前者不能显式的标明类型,而后者想要实现这个目的就很简单了;

AbdyCjen 2020-12-10 02:35

不太明白为啥要这么写,在参数位置使用impl Trait和使用范型参数实际作用是一样的, 但是前者不能显式的标明类型,而后者想要实现这个目的就很简单了;

aariety 2020-12-09 19:11
trait TA {
    fn handle(data: u8) -> u8;
}

trait TB {
    fn convert(tr: impl TA) -> u8;
}

struct SA;

struct S2;

impl TA for S2 {
    fn handle(data: u8) -> u8 {
        ...
    }
}

impl TB for SA {
    fn convert(tr: impl TA) -> u8 {
        S2::handle(1234)
    }
}
1 共 5 条评论, 1 页