Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[Rust] std::ops::Deref 본문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | use std::ops::Deref; struct Foo<T> { v: T } impl<T> Deref for Foo<T> { type Target = T; fn deref(&self) -> &Self::Target { &self.v } } fn main() { let foo = Foo { v: 42i32 }; println!("{}", *foo); let foo = Foo { v: "neurowhai" }; println!("{:?}", foo.to_uppercase()); } | cs |
42
"NEUROWHAI"
말 그대로 Deref trait을 구현하면 역참조 연산을 오버로딩?할 수 있게 해줍니다.
foo.to_uppercase()에서 (*foo).to_uppercase()라고 안쓰고 바로 호출했다는걸 유심히 보시면 됩니다.
왜냐하면 Rust에는 특별한 규칙이 있거든요.
‘deref coercions’이라고 부르는 이 규칙은 타입 U가 Deref<Target=T>를 구현(impl)한다면
&U 값은 자동으로 &T로 변경될 수 있게 합니다.
ㅎㄷㄷ
'개발 및 공부 > 언어' 카테고리의 다른 글
[Rust] rusti 소개 - Interpret Rust (0) | 2018.01.05 |
---|---|
[C++] 책 읽다가 본 충격적인 코드 - private 멤버 접근 방법 (0) | 2018.01.03 |
[Rust] std::borrow::Cow (0) | 2018.01.03 |
[Rust] 연관된 타입(Associated Types) (0) | 2018.01.03 |
[Rust] std::iter::IntoIterator (0) | 2018.01.03 |
Comments