< 返回版块

sstudioer 发表于 2021-02-13 21:50

trait A{
    fn xy(&mut self){
        self.x +=1 ;  // 这里的self是什么? 
    }
}
struct B{
    x:i32, y:i32,
}
impl A for B{}

fn main() {
    let mut b = B{x:0, y:0};
    b.xy();
}

为什么这段代码执行不了?

评论区

写评论
yuhao1229 2021-02-15 11:02

这个+=是个语法糖,详细的看std::ops::Add这个trait。 self也是一个语法糖,函数签名里边的fn xy(&mut self)其实是fn xy(self : &mut Self),这个Self代表impl这个trait的具体类型。

作者 sstudioer 2021-02-14 00:32

thanks;

--
👇
Cupnfish: 额。。。这个。。。&self就是这个trait要给哪个结构体实现的时候的那个结构体呀。 你这里编译不过是因为,你在trait定义的时候,直接调用了你想要实现的结构体的字段,这不科学,比如你给一个没有x字段的结构体实现这个trait的时候,你实现的这个方法怎么处理?这个结构体又没有x字段。。。

Cupnfish 2021-02-13 22:05

额。。。这个。。。&self就是这个trait要给哪个结构体实现的时候的那个结构体呀。 你这里编译不过是因为,你在trait定义的时候,直接调用了你想要实现的结构体的字段,这不科学,比如你给一个没有x字段的结构体实现这个trait的时候,你实现的这个方法怎么处理?这个结构体又没有x字段。。。

1 共 3 条评论, 1 页