Rc 인터페이스를 보면 구조체에 메서드가 있지만 그 요소가 self
없이 정의되었으므로 정적이지만 실제로는 일반적인 개체 메서드가 될 수 없습니다. 질문은 왜 그렇게 정의되어 있는가? 왜, 예를 들어, Rc::weak_count는 형태로 정의된다왜 녹의 종류가 객체 메서드 대신 정적 메서드를 제공합니까?
fn weak_count(this: &Rc<T>) -> usize
대신 :
fn weak_count(&self) -> usize
Rc 인터페이스를 보면 구조체에 메서드가 있지만 그 요소가 self
없이 정의되었으므로 정적이지만 실제로는 일반적인 개체 메서드가 될 수 없습니다. 질문은 왜 그렇게 정의되어 있는가? 왜, 예를 들어, Rc::weak_count는 형태로 정의된다왜 녹의 종류가 객체 메서드 대신 정적 메서드를 제공합니까?
fn weak_count(this: &Rc<T>) -> usize
대신 :
fn weak_count(&self) -> usize
그것은 그렇지 않으면 Rc
의 Deref
및 DerefMut
구현을 통해 볼 것 쉐도 잉 방법을 방지하는 것입니다. documentation of Rc
인용 : Rc
의
고유의 방법을 사용하면, 예를 들어로 전화를해야한다는 것을 의미 모든 관련 기능이 있습니다
value.get_mut()
대신Rc::get_mut(&mut value)
입니다. 이렇게하면 내부 유형T
의 메소드와의 충돌을 피할 수 있습니다.
예를 들어, Foo
가 자신의 방법 Rc::weak_count
를 호출 Rc::weak_count(&foo)
을 사용자가 Foo::weak_count
전화를 foo.weak_count(…)
를 작성할 수 있습니다 것이 정적 방법을 사용하여, weak_count
이라고하며 정의 위치를 Rc<Foo>
이있는 경우.
(이러한 이유 때문에 Deref
/DerefMut
을 정의하는 유형에 내장 메소드를 추가하면 이전 버전과의 호환성이 깨질 수 있습니다).
나는 같은 페이지에서 공식 문서를 놓쳤다 ... 나는 아주 나빠야한다. 나는 스스로 downvote 줄 :) –