2.2 Tuples

튜플은 서로 다른 타입의 값들의 집합체이다. 튜플은 괄호 ()를 사용해 생성되고, 각 튜플 자신은 타입 선언이 되어 있는 값(T1, T2, ...)으로 T1, T2는 그의 멤버의 타입이다. 함수가 튜플을 다양한 값을 반환할 때 사용할 수 있고, 튜플은 몇 개든 값을 보관할 수 있다.

// 튜플은 함수 인자로도 반환 값으로도 사용될 수 있다.
fn reverse(pair: (i32, bool)) -> (bool, i32) {
    // `let`은 튜플의 멤버를 변수에 바인드 할 때 사용된다.
    let (integer, boolean) = pair;

    (boolean, integer)
}

// 다음 구조체는 activity 용.
#[derive(Debug)]
struct Matrix(f32, f32, f32, f32);

fn main() {
    // 서로 다른 타입 무리의 튜플 
    let long_tuple = (1u8, 2u16, 3u32, 4u64,
                      -1i8, -2i16, -3i32, -4i64,
                      0.1f32, 0.2f64,
                      'a', true);

    // tuple에서 색인으로 값을 추출 할 수 있다.
    println!("long tuple first value: {}", long_tuple.0);
    println!("long tuple second value: {}", long_tuple.1);

    // 튜플이 튜플의 멤버가 될 수 있다.
    let tuple_of_tuples = ((1u8, 2u16, 2u32), (4u64, -1i8), -2i16);

    // 튜플은 출력 가능
    println!("tuple of tuples: {:?}", tuple_of_tuples);

    let pair = (1, true);
    println!("pair is {:?}", pair);

    println!("the reversed pair is {:?}", reverse(pair));

    // 하나의 요소인 튜플을 만드려면, 괄호와는 별도로 쉼표를 통해 알리는게 필요하다.
    println!("one element tuple: {:?}", (5u32,));
    println!("just an integer: {:?}", (5u32));

    // 튜플은 바인딩을 생성해서 역구조화 할 수 있다.
    //tuples can be destructured to create bindings
    let tuple = (1, "hello", 4.5, true);

    let (a, b, c, d) = tuple;
    println!("{:?}, {:?}, {:?}, {:?}", a, b, c, d);

    let matrix = Matrix(1.1, 1.2, 2.1, 2.2);
    println!("{:?}", matrix)

}

Activity

  1. 반복: fmt::Display trait을 상기 예제의 Matrix 구조체에 추가하여 디버그 형식 {:?}에서 표시 형식 {}로 변경했을 때, 다음과 같은 출력이 되도록 해보자:

    ( 1.1 1.2 )
    ( 2.1 2.2 )
    

    print display 예제를 참고.

  2. transposereverse함수를 뼈대로 추가하며 matrix를 인자로 허용해 두 요소가 교환된 matrix를 반환하도록 하자. 예:

println!("Matrix:\n{}", matrix);
println!("Transpose:\n{}", transpose(matrix));

결과는 다음과 같이 출력된다:

Matrix:
( 1.1 1.2 )
( 2.1 2.2 )
Transpose:
( 1.1 2.1 )
( 1.2 2.2 )

results matching ""

    No results matching ""