Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

표현식

if 표현식

if condition then a else b는 한 줄짜리 if 표현식이다:

pub fn clamp(total: i32) -> i32 = if total < 0 then 0 else total

블록을 여는 if는 let x = if c:, x += if c:, return if c:, max(if c:, .map(|x| if c: 처럼 값 자리에 올 수 있고, else if d:와 else: 줄은 if와 같은 들여쓰기에 둔다. match도 let x = match y:, .filter(|v| match v:, [match x:처럼 쓸 수 있고, f(if c { 뒤의 else: 가지도 마찬가지다.

pub fn sign(value: i32) -> i32:
    let sign = if value > 0:
        1
    else if value < 0:
        -1
    else:
        0
    sign

머리와 같은 들여쓰기의 } 줄은 연산자로 값을 이어 간다:

pub fn bucket(value: i32) -> i32:
    let base = match value:
        0 => 1
        _ => 2
    } * 10
    base

let ... else

pub fn first(values: &[i32]) -> i32:
    let [first, ..] = values else:
        return 0
    *first

클로저

클로저 머리는 let f = |n: u8| -> String:, move ||:, xs.sort_by(|a, b|:처럼 블록을 열 수 있다. 머리가 (나 [를 열어 둔 블록은 머리와 같은 들여쓰기에서 그것을 닫는 줄로 끝나고, 그 줄의 나머지는 표현식을 이어 간다:

pub fn sorted(mut values: Vec[i32]) -> Vec[i32]:
    values.sort_by(|a, b|:
        b.cmp(a)
    )
    values

pub fn total(values: &[i32]) -> i32:
    values.iter().map(|value|:
        value * 2
    ).sum()

{ 머리도 같은 방식으로 })로 닫는다. { 블록, 끝에 붙은 match 머리, 머리가 {로 끝나는 체인의 마지막 else 뒤에서는 })?나 }).method() 같은 닫는 줄이 뒤의 접미사를 유지한다. 한 줄로 쓴 마지막 else는 else { floor })처럼 그룹을 닫는 것으로 체인을 끝낸다:

pub fn raised(values: &[i32], floor: i32) -> i32:
    values.iter().map(|value| if *value > floor:
        *value
    else { floor }).sum()

닫는 줄에서 다음 블록 인자를 열 수 있다:

pub fn size(value: Option[usize]) -> usize:
    value.map_or_else(||:
        0
    , |n|:
        n * 2
    )

Match arm

블록을 여는 match arm 본문은 Some(x) => match x:, Ok(v) => unsafe:, None => Ok(unsafe:처럼 그 뒤에 들여쓴 줄들을 차지한다.

pub fn describe(value: Option[i32]) -> &'static str:
    match value:
        Some(x) => match x:
            0 => "zero"
            _ => "some"
        None => "none"

구조체 리터럴

구조체 리터럴은 Rust 문법을 그대로 쓴다: Self{ id, name }.