Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[Rust] &mut T -> &T 변경하기 본문
Rust. Change mutable reference to immutable.
&mut T 형식으로 받았는데 원하는 메소드가 &T에만 구현된 경우가 있었습니다.
(C++ 사용자는 뭔소리야 싶겠지만 Rust는 타입이 사용된 상태?마다 다르게 메소드를 구현할 수 있습니다.)
아래는 그 오류를 재연한 예제입니다.
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로 바꿔야 하는데 방법은 아래와 같이 간단합니다.
let x: &mut i32 = &mut 42;
let y: &i32 = &*x;
흠... 이걸 자동으로 안해주는 이유도 설계 때문일까요...
'개발 및 공부 > 언어' 카테고리의 다른 글
[Kotlin] 헬로, 코틀린! (0) | 2018.08.04 |
---|---|
[Rust] Auto-Dereferencing Rules (자동 역참조 규칙) (0) | 2018.07.27 |
[C++] ADL(Argument Dependent Lookup) 혹은 Koenig Algorithm 설명 (0) | 2018.06.23 |
[JavaScript] replace all (0) | 2018.06.19 |
[C#] BinaryFormatter 사용해서 직렬화/역직렬화 (0) | 2018.06.03 |
Comments