引数を持つクロージャ
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 61/66。
引数を取らないクロージャも便利ですが、多くの場合、クロージャをより柔軟で強力なものにするために、データを渡したいと考えるでしょう。クロージャにパラメータを追加する方法は、以前に学んだのと同じパターンに従いますが、垂直バー(|)の中に値を記述します。
1つの引数を受け取るクロージャを定義する方法は次のとおりです。
let add_one = |x: i32| x + 1;パラメータ x が、関数のパラメータと同じように垂直棒(バー)の間に置かれていることに注目してください。その後、値を渡すことでこのクロージャを呼び出すことができます:
let add_one = |x: i32| x + 1;
let result = add_one(5); // resultは6です複数のパラメータを持つクロージャの場合、それらをカンマで区切ります:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // 結果は12ですチャレンジ
簡単2つの入力を受け取ります。最初の入力は数値で、2番目の入力も数値です。2つのパラメータを受け取り、べき乗(最初のパラメータを2番目のパラメータで累乗したもの)を計算するクロージャを作成してください。そのクロージャを変数に格納し、入力値を使用して呼び出し、結果を出力してください。
要件:
- 最初の入力(底となる数)を読み込み、空白をトリミングする
- それを
i32型にパースする - 2番目の入力(指数)を読み込み、空白をトリミングする
- それを
u32型にパースする .pow()メソッドを使用してべき乗を計算する、2つのパラメータを持つクロージャを作成する- クロージャを変数に格納する
- 両方の入力値を使用してクロージャを呼び出す
- 結果を出力する
入力:
- 1行目: 底となる数(例:
2) - 2行目: 指数(例:
3)
出力:
- べき乗計算の結果
チートシート
クロージャは、垂直バー || の間にパラメータを記述することで、引数を受け取ることができます。
let add_one = |x: i32| x + 1;
let result = add_one(5); // result は 6 です複数のパラメータがある場合は、カンマで区切ります。
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result は 12 です自分で試してみよう
use std::io;
fn main() {
// 最初の入力を読み込む(基数)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// 2番目の入力を読み込む(指数)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: 累乗を計算するクロージャを作成し、変数に格納する
// TODO: 基数と指数を引数にしてクロージャを呼び出す
// 結果を表示する
println!("{}", result);
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。