gpt4 book ai didi

rust - 用静态函数为特征实现特征

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

trait Trait<T> {
fn equality() -> bool;
}

impl<T> PartialEq for Trait<T> {
fn eq(&self, other: &Trait<T>) -> bool {
self.equality()
}
}

结果

main.rs:5:23: 5:31 error: the trait `Trait` cannot be made into an object [E0372]
main.rs:5 impl<T> PartialEq for Trait<T> {

删除静态方法使其可编译。带有 &self 参数的方法也会编译。

最佳答案

它归结为一个称为对象安全的问题,您可以在RFC 255 中找到相关信息。 ;休恩有a good explanation of object safety in his blog ,也是。

基本上,创建特征对象需要隐含地定义其自身特征对象的特征;在这种情况下,这将是 impl<'a, T> Trait<T> for Trait<T> + 'a .如果可以为所有方法编写有意义的定义,那么特征就是对象安全的。静态方法在这种情况下没有意义——fn equality() -> bool 的主体是什么?是,没有 Self键入周围调用 equality方法?它需要凭空提取一个 bool 值,但它恭敬地拒绝这样做。

关于rust - 用静态函数为特征实现特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238570/

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