为什么这段代码有效?
trait T: std::fmt::Debug {
fn func(mut self: Box<Self>) -> Box<T>;
}
#[derive(Debug)]
struct S {
i: i32,
}
impl T for S {
fn func(mut self: Box<Self>) -> Box<T> {
self.as_mut().i += 1;
self
}
}
impl S {
fn new() -> Box<S> {
Box::new(S{i: 0})
}
}
fn main() {
let s = S::new();
let s_inc = s.func();
print!("{:?}", s_inc);
}
(游乐场)
特别是,我不明白
中的类型注释mut self: Box<Self>
是怎样的
impl T for S {
fn func(mut self: Box<Self>) -> Box<T> {
// ...
}
}
的工作原理。 self
不应该是S
类型,而不是Box<S>?
方法规则的哪一部分允许这种语法?