Size: a a a

2018 February 05

D

Dmitry in Rust Beginners
PAM3ES ++
pub struct NewsArticle {
   pub headline: String,
   pub location: String,
   pub author: String,
   pub content: String,
}

impl Summarizable for NewsArticle {
   fn summary(&self) -> String {
       format!("{}, by {} ({})", self.headline, self.author, self.location)
   }
}

pub struct Tweet {
   pub username: String,
   pub content: String,
   pub reply: bool,
   pub retweet: bool,
}

impl Summarizable for Tweet {
   fn summary(&self) -> String {
       format!("{}: {}", self.username, self.content)
   }
}
откуда пример
источник

P+

PAM3ES ++ in Rust Beginners
второе издание, офф
источник

D

Dmitry in Rust Beginners
ты сразу со второго ?
источник

P+

PAM3ES ++ in Rust Beginners
первое читал, на русском ток
источник

D

Dmitry in Rust Beginners
PAM3ES ++
первое читал, на русском ток
так там есть инфа о трейтах
источник

🦉⁣

🦉 ⁣ in Rust Beginners
PAM3ES ++
pub struct NewsArticle {
   pub headline: String,
   pub location: String,
   pub author: String,
   pub content: String,
}

impl Summarizable for NewsArticle {
   fn summary(&self) -> String {
       format!("{}, by {} ({})", self.headline, self.author, self.location)
   }
}

pub struct Tweet {
   pub username: String,
   pub content: String,
   pub reply: bool,
   pub retweet: bool,
}

impl Summarizable for Tweet {
   fn summary(&self) -> String {
       format!("{}: {}", self.username, self.content)
   }
}
Ты можешь в функции принимать объекты по трейту

Например
fn foo<T: Summarizable>(target: T)
источник

🦉⁣

🦉 ⁣ in Rust Beginners
И при этом реализовать трейт для разных структур
источник

🦉⁣

🦉 ⁣ in Rust Beginners
В функцию подойдут любые объекты
источник

🦉⁣

🦉 ⁣ in Rust Beginners
PAM3ES ++
pub struct NewsArticle {
   pub headline: String,
   pub location: String,
   pub author: String,
   pub content: String,
}

impl Summarizable for NewsArticle {
   fn summary(&self) -> String {
       format!("{}, by {} ({})", self.headline, self.author, self.location)
   }
}

pub struct Tweet {
   pub username: String,
   pub content: String,
   pub reply: bool,
   pub retweet: bool,
}

impl Summarizable for Tweet {
   fn summary(&self) -> String {
       format!("{}: {}", self.username, self.content)
   }
}
И твит и новость
источник

🦉⁣

🦉 ⁣ in Rust Beginners
Но в функции будут видны только методы этого трейта
источник

🦉⁣

🦉 ⁣ in Rust Beginners
То есть только .summary
источник

A

Alik in Rust Beginners
PAM3ES ++
pub struct NewsArticle {
   pub headline: String,
   pub location: String,
   pub author: String,
   pub content: String,
}

impl Summarizable for NewsArticle {
   fn summary(&self) -> String {
       format!("{}, by {} ({})", self.headline, self.author, self.location)
   }
}

pub struct Tweet {
   pub username: String,
   pub content: String,
   pub reply: bool,
   pub retweet: bool,
}

impl Summarizable for Tweet {
   fn summary(&self) -> String {
       format!("{}: {}", self.username, self.content)
   }
}
Представь, что есть интерфейс Summarizable,  забудь на секунду про трейт. Теперь ты сможешь реализовать этот интерфейс для других структов) А потом пользоваться нештяками полиморфизма с помощью Summarizable, как описал @sergeysova .
источник

P+

PAM3ES ++ in Rust Beginners
Alik
Представь, что есть интерфейс Summarizable,  забудь на секунду про трейт. Теперь ты сможешь реализовать этот интерфейс для других структов) А потом пользоваться нештяками полиморфизма с помощью Summarizable, как описал @sergeysova .
то есть если я уберу summary из Tweet, то я смогу из него использовать summary который в NewsArticle?
источник

🦉⁣

🦉 ⁣ in Rust Beginners
PAM3ES ++
то есть если я уберу summary из Tweet, то я смогу из него использовать summary который в NewsArticle?
Нет
источник

🦉⁣

🦉 ⁣ in Rust Beginners
Структуры не связаны никак
источник

🦉⁣

🦉 ⁣ in Rust Beginners
Реализация пишется отдельно на каждую структуру
источник

🦉⁣

🦉 ⁣ in Rust Beginners
Так как у структур скорее всего будут разные поля
источник

A

Alik in Rust Beginners
🦉 ⁣
Нет
Так он же говорит юзать summary из другой структы
источник

🦉⁣

🦉 ⁣ in Rust Beginners
Alik
Так он же говорит юзать summary из другой структы
Только если будет инстанс той структуры
источник

P+

PAM3ES ++ in Rust Beginners
🦉 ⁣
Так как у структур скорее всего будут разные поля
тогда я чет не пойму, тогда вообще зачем нужны трейты, я походу не правильно понимаю, я понимаю вот так сейчас(про то что ты пишешь), структуры не связаны, из них нельзя ничего делать с другими структурами, даже если они от одного traits, но ты сможешь запихнуть объект.
источник