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();
}
为什么这段代码执行不了?
1
共 3 条评论, 1 页
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();
}
为什么这段代码执行不了?
评论区
写评论这个
+=
是个语法糖,详细的看std::ops::Add
这个trait。 self也是一个语法糖,函数签名里边的fn xy(&mut self)
其实是fn xy(self : &mut Self)
,这个Self代表impl这个trait的具体类型。thanks;
--
👇
Cupnfish: 额。。。这个。。。
&self
就是这个trait要给哪个结构体实现的时候的那个结构体呀。 你这里编译不过是因为,你在trait定义的时候,直接调用了你想要实现的结构体的字段,这不科学,比如你给一个没有x字段的结构体实现这个trait的时候,你实现的这个方法怎么处理?这个结构体又没有x字段。。。额。。。这个。。。
&self
就是这个trait要给哪个结构体实现的时候的那个结构体呀。 你这里编译不过是因为,你在trait定义的时候,直接调用了你想要实现的结构体的字段,这不科学,比如你给一个没有x字段的结构体实现这个trait的时候,你实现的这个方法怎么处理?这个结构体又没有x字段。。。