Rust中的Box类型和方法语法

时间:2016-06-21 22:30:48

标签: rust

为什么这段代码有效?

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>?方法规则的哪一部分允许这种语法?

0 个答案:

没有答案