Rust 연관 유형 및 기본 일반 유형 매개변수
Rust 프로그램을 읽을 때 다음과 같은 코드가 나타날 때가 있습니다.
trait Iterator {
type Item;
fn next(&mut self) -> Option<:item>;
}
다음은 위 코드에 대한 설명입니다. Iterator trait에는 연관 유형
Item
이 있습니다.Item
는 점유 유형이며,next 방법은 Option<:item/>
유형의 값을 되돌려줍니다.이trait
의 실현자는 Item
의 구체적인 유형을 지정할 것이다.여기
type
의 용법이 바로 관련 유형이다.연관 유형(associated types)은 유형 자리 표시자를trait와 연관시키는 방식으로trait 방법 서명에서 이 자리 표시자 유형을 사용할 수 있습니다.trait의 실현자는 특정한 실현에 대해 이 유형의 위치에 해당하는 구체적인 유형을 지정한다.이렇게 하면 여러 종류의trait를 사용할 수 있으며, 이trait가 실현될 때까지 이러한 유형이 구체적으로 무엇인지 알 필요가 없다.
연관 유형을 사용하는 코드의 예는 다음과 같습니다.
pub trait Watch {
type Item;
fn inner(&self) -> Option<:item>;
}
struct A {
data: i32,
}
impl Watch for A {
type Item = i32;
fn inner(&self) -> Option<:item> {
Some(self.data)
}
}
struct B {
data: String,
}
impl Watch for B {
type Item = String;
fn inner(&self) -> Option<:item> {
Some(self.data.clone())
}
}
fn main() {
let a = A{data: 10};
let b = B{data: String::from("B")};
assert_eq!(Some(10), a.inner());
assert_eq!(Some(String::from("B")), b.inner());
}
2. 기본 일반 유형 매개 변수
다음과 같은 유형의 코드도 만나게 됩니다.
#[lang = "add"]
pub trait Add {
type Output;
#[must_use]
fn add(self, rhs: RHS) -> Self::Output;
}
여기
Add
는 기본 범주 형식 매개 변수로 지정한 범주 형식을 표시하지 않으면 기본 범주 형식Self
을 나타낸다.일반 형식 파라미터를 사용할 때, 일반 형식에 기본적인 구체적인 형식을 지정할 수 있습니다.기본 형식이 충분하다면, 구체적인 형식을 위한trait의 필요성을 없앨 수 있습니다.일반 형식에 기본 형식을 지정하는 문법은 일반 형식을 설명할 때 사용됩니다.
기본 일반 유형 매개 변수를 사용하는 예제 코드는 다음과 같습니다.
pub trait Watch {
type Item;
fn inner(&self) -> Option<:item>;
fn info(&self) -> Inner;
}
struct A {
data: i32,
}
impl Watch for A {
type Item = i32;
fn inner(&self) -> Option<:item> {
Some(self.data)
}
fn info(&self) -> i32 {
println!("A inner is {}", self.data);
self.data
}
}
struct B {
data: String,
}
impl Watch for B {
type Item = String;
fn inner(&self) -> Option<:item> {
Some(self.data.clone())
}
fn info(&self) -> String {
println!("B inner is {}", self.data);
self.data.clone()
}
}
fn main() {
let a = A{data: 10};
let b = B{data: String::from("B")};
assert_eq!(10, a.info());
assert_eq!(Some(String::from("B")), b.inner());
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.