Rust
연산자와 오버로딩
수색…
소개
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