수색…


소개

Rust의 대부분의 연산자는 사용자 정의 유형에 대해 정의 ( "오버로드") 될 수 있습니다. 이것은 std::ops 모듈에 각각의 특성을 구현하여 얻을 수 있습니다.

덧셈 연산자 오버로드 (+)

더하기 연산자 (+)를 오버로딩하려면 std::ops::Add 특성을 구현해야합니다.

문서에서 특성의 전체 정의는 다음과 같습니다.

pub trait Add<RHS = Self> {
    type Output;
    fn add(self, rhs: RHS) -> Self::Output;
}

어떻게 작동합니까?

  • 특성은 왼손잡이 유형을 위해 실행된다.
  • 특성은 하나의 Right Hand Side 인수에 대해 구현되며, 지정되지 않는 한 기본적으로 Left Hand Side와 동일한 유형을 갖습니다
  • 추가 결과의 유형은 연관된 유형 Output 지정됩니다.

따라서 3 가지 유형을 가질 수 있습니다.

참고 : 특성은 왼쪽 및 오른쪽 인수를 사용하므로 베어 유형이 아닌 유형에 대한 참조로 구현하는 것이 좋습니다.


사용자 정의 유형에 대해 + 구현 :

use std::ops::Add;

#[derive(Clone)]
struct List<T> {
    data: Vec<T>,
}
//  Implementation which consumes both LHS and RHS
impl<T> Add for List<T> {
    type Output = List<T>;

    fn add(self, rhs: List<T>) -> List<T> {
        self.data.extend(rhs.data.drain(..));
        self
    }
}

//  Implementation which only consumes RHS (and thus where LHS != RHS)
impl<'a, T: Clone> Add<List<T>> for &'a List<T> {
    type Output = List<T>;

    fn add(self, rhs: List<T>) -> List<T> {
        self.clone() + rhs
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow