NeuroWhAI의 잡블로그

[Rust] std::ops::Deref 본문

개발 및 공부/언어

[Rust] std::ops::Deref

NeuroWhAI 2018. 1. 3. 18:53


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로 변경될 수 있게 합니다.


ㅎㄷㄷ



Comments