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