From&Into.png
    简单来说,讲的就是类型转换的事情。无论是From还是Into,方向一定是从类型A转向类型B,只不过讨论的主体不一样。

    Into讲的是怎么从A变成B,所以有一个A,A自己调用 Into B,变成了B。

    1. // 为A实现Into trait
    2. impl Into<B> for A{
    3. fn into(self){/*...*/}
    4. }
    5. // 调用
    6. let a:A = A{/*...*/};
    7. let b:B = a.Into();

    From讲的是B怎么通过一个A,求解而来,求解的方法是预先定义好的,这算是B的关联方法。

    1. // 为B实现From trait
    2. impl From<A> for B{
    3. fn from(a:A){/*...*/}
    4. }
    5. // 调用
    6. let a:A = A{/*...*/};
    7. let b:B = B::from(a);

    有趣的是无论实现了From或者Into,Rust都会自动帮助我们补全另一部分。