Rust에는 struct의 종류는 세가지 있다. C 스타일의 struct과 Tuple 스타일의 struct, Unit 스타일의 struct을 사용할 수 있다.
C 스타일의 struct는 C언어에서 본 방식과 비슷하다. 각 요소마다 이름과 타입을 지정하는 방식이다.
struct Color {
name: String,
code: String,
}
fn main() {
let green = Color {
name: String::from("green"),
code: String::from("#00ff00"),
};
println!("{} {}", green.name, green.code);
}
Tuple 스타일의 struct는 Tuple처럼 요소에 이름을 붙이지 않는다.
struct Color(String, String)
fn main() {
let green = Color(
String::from("green"),
String::from("#00ff00"),
);
println!("{} {}", green.0, green.1);
}
Unit 스타일의 struct는 요소가 없는 struct다. 보통 단일 타입을 지정할 때 사용한다.
struct None
fn main() {
let something = None {};
}
Rust는 따로 클래스 지정이 없지만 struct에 method를 지정하는 방식으로 struct를 클래스처럼 사용할 수 있다. lvalue는 &self 파라미터를 통해 레퍼런스를 받는다. 만약 lvalue의 변경이 필요하다면 &mut self로 바꾸면 된다.
struct Color {
r: i32,
g: i32,
b: i32
}
impl Color {
fn mix(&mut self, other: &Color) {
self.r = (self.r + other.r) / 2;
self.g = (self.g + other.g) / 2;
self.b = (self.b + other.b) / 2;
}
fn to_hex(&self) -> String {
String::from(format!("#{:02x}{:02x}{:02x}", self.r, self.g, self.b))
}
}
fn main() {
let mut color1 = Color { r: 0x00, g: 0xff, b: 0x00 };
let color2 = Color { r: 0xff, g: 0x00, b: 0x00 };
color1.mix(&color2);
println!("{}", color1.to_hex());
}
'Archive > Rust' 카테고리의 다른 글
[Rustlings] 8. module (0) | 2021.05.22 |
---|---|
[Rustlings] 7. enum (0) | 2021.05.21 |
[Rustlings] 5. Primitive Types (0) | 2021.05.15 |
[Rustlings] 4. Move Semantics (0) | 2021.05.14 |
[Rustlings] 3. if (0) | 2021.05.12 |