Rust関数定義

fn main() {
	hello(String::from("taro"));
	hello(String::from("hanako"));
}

fn hello(name:String) {
	println!("Hello, {}!",name);
}

戻り値を持つ関数

fn main(){
	print_msg(100);
	print_msg(200);
	print_msg(300);
}

fn print_msg(max:i32){
	println!("{}までの合計は、{}です。", max, calc(max));
}

fn calc(max:i32)-> i32 {
	let mut result = 0;
	for n in 0..max {
		result += n;
	}
	result
}

### 値としての関数
定義に関数名がない匿名関数
変数 = |引数| {…処理…}

fn main(){
	let calc = |max| {
		let mut result = 0;
		for n in 0..max {
			result += n;
		}
		result
	};

	let print_msg = |max| {
		println!("{}までの合計は{}です。", max, calc(max));
	}

	print_msg(100);
	print_msg(200);
	print_msg(300);
}

### クロージャ
値として定義された匿名関数を変数に代入したものはクロージャという
元々、関数をオブジェクトとして利用できるようにする仕組み

fn main(){
	let max = 100;
	let res = calc(max);

	let print_msg = || {
		println!("{}までの合計は{}です。", max, res);
	};
	print_msg();

	let max = 200;
	let res = calc(max);
	let print_msg = || {
		println!("0-{} Total:{}", max, res);
	};
	print_msg();
}

fn calc(max:i32)-> i32 {
	let mut result = 0;
	for n in 0..max {
		result += n;
	}
	result
}