Menu
Coddy logo textTech

引数を持つクロージャ

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です
challenge icon

チャレンジ

簡単

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);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン