Читаем Rust by Example полностью

fn university(&self) -> String;

}

trait Programmer {

fn fav_language(&self) -> String;

}

// CompSciStudent (computer science student) is a subtrait of both Programmer

// and Student. Implementing CompSciStudent requires you to impl both supertraits.

trait CompSciStudent: Programmer + Student {

fn git_username(&self) -> String;

}

fn comp_sci_student_greeting(student: &dyn CompSciStudent) -> String {

format!(

"My name is {} and I attend {}. My favorite language is {}. My Git username is {}",

student.name(),

student.university(),

student.fav_language(),

student.git_username()

)

}

fn main() {}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="see_also_58"><strong><a l:href="#see_also_58">See also:</a></strong></p>

The Rust Programming Language chapter on supertraits

<p id="disambiguating_overlapping_traits"><strong><a l:href="#disambiguating_overlapping_traits">Disambiguating overlapping traits</a></strong></p>

A type can implement many different traits. What if two traits both require the same name? For example, many traits might have a method named get(). They might even have different return types!

Good news: because each trait implementation gets its own impl block, it's clear which trait's get method you're implementing.

What about when it comes time to call those methods? To disambiguate between them, we have to use Fully Qualified Syntax.

trait UsernameWidget {

// Get the selected username out of this widget

fn get(&self) -> String;

}

trait AgeWidget {

// Get the selected age out of this widget

fn get(&self) -> u8;

}

// A form with both a UsernameWidget and an AgeWidget

struct Form {

username: String,

age: u8,

}

impl UsernameWidget for Form {

fn get(&self) -> String {

self.username.clone()

}

}

impl AgeWidget for Form {

fn get(&self) -> u8 {

self.age

}

}

fn main() {

let form = Form{

username: "rustacean".to_owned(),

age: 28,

};

// If you uncomment this line, you'll get an error saying

// "multiple `get` found". Because, after all, there are multiple methods

// named `get`.

// println!("{}", form.get());

let username =

::get(&form);

assert_eq!("rustacean".to_owned(), username);

let age =

::get(&form);

assert_eq!(28, age);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители