Реализация impl Trait for
Конструкция impl Trait for используется
для реализации типажа для определённого типа.
Она сообщает компилятору, что тип реализует
поведение, описанное в типаже. Слева от ключевого
слова for указывается типаж, а справа -
тип, для которого выполняется реализация.
Синтаксис
impl Trait for Type
{
// methods
}
Пример
Давайте объявим типаж Greet с одним методом
и реализуем его для структуры Person:
trait Greet
{
fn hello(&self) -> String;
}
struct Person
{
name: String,
}
impl Greet for Person
{
fn hello(&self) -> String
{
format!("Hello, {}!", self.name)
}
}
fn main()
{
let person = Person { name: String::from("abcde") };
println!("{}", person.hello());
}
Результат выполнения кода:
"Hello, abcde!"
Пример
Реализацию можно выполнить и для примитивного типа.
Давайте реализуем типаж Doubler для i32:
trait Doubler
{
fn double(&self) -> i32;
}
impl Doubler for i32
{
fn double(&self) -> i32
{
self * 2
}
}
fn main()
{
let num = 5;
println!("{}", num.double());
}
Результат выполнения кода:
10
Пример
Один типаж можно реализовать сразу для нескольких
типов. Давайте реализуем типаж Describe
для i32 и для String:
trait Describe
{
fn describe(&self) -> String;
}
impl Describe for i32
{
fn describe(&self) -> String
{
format!("number: {}", self)
}
}
impl Describe for String
{
fn describe(&self) -> String
{
format!("string: {}", self)
}
}
fn main()
{
let num = 12345;
let text = String::from("abcde");
println!("{}", num.describe());
println!("{}", text.describe());
}
Результат выполнения кода:
"number: 12345"
"string: abcde"
Смотрите также
-
ключевое слово
trait,
которое объявляет новый типаж -
конструкция
impl Trait,
которая возвращает анонимный тип, реализующий типаж -
конструкция
dyn Trait,
которая создаёт типаж-объект для динамической диспетчеризации -
конструкция
trait bound,
которая ограничивает обобщённый тип реализуемым типажом