#[derive(Debug)]
struct Test {
i: i32,
s: String,
}
impl Test {
fn print(&self, prefix: i32) {
println!("{} : {}, {}", prefix, self.i, self.s);
}
fn get_i(&self) -> i32 {
self.i
}
fn set_i(&mut self, i: i32) {
self.i = i;
}
fn from(i: i32, s: String) -> Test {
Test { i, s }
}
}
fn main() {
{
let test = Test {
i: 1,
s: String::from("a"),
};
println!("1 : {}, {}", test.i, test.s);
}
{
let mut test = Test::from(1, String::from("a"));
test.print(2);
test.set_i(3);
println!("3 : {}", test.get_i());
}
// field init shorthand
{
let i = 1;
let s = String::from("a");
let test = Test { i, s };
println!("4 : {:?}", test);
}
// struct update syntax
{
let test1 = Test {
i: 1,
s: String::from("a"),
};
let test2 = Test {
s: String::from("b"),
..test1
};
println!("5 : {:?}", test1);
println!("6 : {:#?}", test2);
}
// tuple structs
{
struct TS(i32, String);
let ts = TS(1, String::from("a"));
println!("7 : {}, {}", ts.0, ts.1);
}
// unit-like structs
{
struct ULS();
let uls = ULS();
}
}