NeuroWhAI의 잡블로그

[Rust] &mut T -> &T 변경하기 본문

개발 및 공부/언어

[Rust] &mut T -> &T 변경하기

NeuroWhAI 2018. 7. 27. 19:55


Rust. Change mutable reference to immutable.


&mut T 형식으로 받았는데 원하는 메소드가 &T에만 구현된 경우가 있었습니다.

(C++ 사용자는 뭔소리야 싶겠지만 Rust는 타입이 사용된 상태?마다 다르게 메소드를 구현할 수 있습니다.)

아래는 그 오류를 재연한 예제입니다.


https://ideone.com/YeENwm

trait FooPow {
    fn pow(&self) -> i32;
}

struct Foo(i32);

impl<'a> FooPow for &'a Foo {
    fn pow(&self) -> i32 {
        self.0 * self.0
    }
}

/*impl<'a> FooPow for &'a mut Foo {
    fn pow(&self) -> i32 {
        self.0 * self.0
    }
}*/

fn test1(x: &Foo) {
    println!("{}", x.pow());
}

fn test2(x: &mut Foo) {
    println!("{}", x.pow()); // no method named `pow` found for type `&mut Foo` in the current scope
}

fn main() {
    test1(&Foo(42));
    test2(&mut Foo(42));
}


그래서 &mut T를 &T로 바꿔야 하는데 방법은 아래와 같이 간단합니다.


https://ideone.com/2CGv1R

let x: &mut i32 = &mut 42;
let y: &i32 = &*x;


흠... 이걸 자동으로 안해주는 이유도 설계 때문일까요...



Comments