Functions

Functionsを読む。

return x + 1;x + 1(セミコロンがない)が同じ扱いなのが面白い。 あと、プロトタイプ宣言不要なのがC言語から入った身としては嬉しい。

fn main() {
    let f: fn(i32) -> i32; // 関数ポインタ

    f = add_one;

    print_number(5);
    print_sum(5, 6);
    print_number(f(5));
    diverges();
}

fn print_number(x: i32) {
    println!("x is: {}", x);
}

fn print_sum(x: i32, y: i32) {
    println!("sum is: {}", x + y);
}

fn add_one(x: i32) -> i32 {
    x + 1
}

fn diverges() -> ! {
    panic!("This function never returns!");
}
$ RUST_BACKTRACE=1 cargo run
    Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target/debug/4_2_functions`
x is: 5
sum is: 11
x is: 6
thread 'main' panicked at 'This function never returns!', src/main.rs:26
stack backtrace:
   1:        0x10270193a - std::sys::imp::backtrace::tracing::imp::write::h917062bce4ff48c3
   2:        0x1027036cf - std::panicking::default_hook::{{closure}}::h0bacac31b5ed1870
   3:        0x10270296f - std::panicking::default_hook::h5897799da33ece67
   4:        0x102702ee6 - std::panicking::rust_panic_with_hook::h109e116a3a861224
   5:        0x1026fac93 - std::panicking::begin_panic::h634e2b37a96f78d4
   6:        0x1026fb152 - _4_2_functions::diverges::h68ff7cf679053ab8
   7:        0x1026faf43 - _4_2_functions::main::h67a617938b3bde74
   8:        0x102703c8a - __rust_maybe_catch_panic
   9:        0x102703156 - std::rt::lang_start::hd661476ce2fc2931
  10:        0x1026fb189 - main