13.4.5 Bounds

제네릭 타입이 바인드 될 수 있는 것과 마찬가지로, 생명주기(그들 자신의 제네릭)도 바인드를 사용한다. : 문자는 미묘하게 의미가 다르지만, +는 동일하다. 주의해서 다음을 읽어보자:

  1. T: 'a: T모든 참조는 'a보다 더 오래 유지되야 한다.
  2. T: Trait + 'a: 타입 T는 반드시 trait Trait을 구현하고 모든 참조된 T는 반드시 'a보다 오래 유지되야 한다.

아래서 보여주는 예제를 통해 상기 문맥의 동작을 살펴보자:

use std::fmt::Debug; // trait.
#[derive(Debug)]
struct Ref<'a, T: 'a>(&'a T);
// `Ref` `T`
// `'a` . `T` ** `'a`
// . , `Ref` `'a` .
// `Debug` trait .
fn print<T>(t: T) where
T: Debug {
println!("`print`: t is {:?}", t);
}
// `Debug` `'a` `T` **
// . `'a` .
fn print_ref<'a, T>(t: &'a T) where
T: Debug + 'a {
println!("`print_ref`: t is {:?}", t);
}
fn main() {
let x = 7;
let ref_x = Ref(&x);
print_ref(&ref_x);
print(ref_x);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

See also:

generics, bounds in generics, and multiple bounds in generics

results matching ""

    No results matching ""