From
e Into
As características From
e Into
estão inerentemente ligadas, e isto é efetivamente parte da sua implementação. Se fores capaz de converter o tipo A a partir do tipo B, então deveria ser fácil acreditar que deveríamos ser capaz de converter o tipo B para o tipo A.
From
A característica From
permite um tipo definir como criar-se a partir doutro tipo, daí fornecendo um mecanismo muito simples para converter entre vários tipos. Existem numerosas implementações desta característica dentro da biblioteca padrão para conversão de tipos primitivos e comuns.
Por exemplo podemos facilmente converter uma str
numa String
:
Nós podemos fazer algo semelhante para definir uma conversão para o nosso próprio tipo.
use std::convert::From;#[derive(Debug)]struct Number {value: i32,}impl From<i32> for Number {fn from(item: i32) -> Self {Number { value: item }}}fn main() {let num = Number::from(30);println!("My number is {:?}", num);}
Into
A característica Into
é simplesmente o recíproco da característica From
. Isto é, se tiveres implementado a característica From
para o teu tipo, Into
o chamará quando necessário.
O uso da característica Into
normalmente exigirá especificação do tipo para converter conforme o compilador for incapaz de determinar isto na maioria das vezes. No entanto, isto é um pequeno compromisso considerando que recebemos a funcionalidade gratuitamente:
use std::convert::From;#[derive(Debug)]struct Number {value: i32,}impl From<i32> for Number {fn from(item: i32) -> Self {Number { value: item }}}fn main() {let int = 5;// Tente remover a anotação de tipolet num: Number = int.into();println!("My number is {:?}", num);}