
Rust
struct Student {
first_name: String,
last_name: String,
#[allow(unused)]
full_name: String,
}
impl Student {
fn new(first_name: &str, middle_initial: &str, last_name: &str) -> Self {
Self {
first_name: first_name.into(),
last_name: last_name.into(),
full_name: format!("{first_name} {middle_initial} {last_name}"),
}
}
}
impl Person for Student {
fn first_name(&self) -> String {
self.first_name.clone()
}
fn last_name(&self) -> String {
self.last_name.clone()
}
}
trait Person {
fn first_name(&self) -> String;
fn last_name(&self) -> String;
}
//fn greeter(person: impl Person) -> String { // またはこう
fn greeter<P: Person>(person: P) -> String {
format!("Hello, {} {}", person.first_name(), person.last_name())
}
fn main() {
let user = Student::new("Jane", "M.", "User");
println!("{}", greeter(user));
}