📝

|| ←この棒について

に公開4

Rustにおいて、この棒はクロージャ演算子のどちらかになります。演算子は割愛。
読み方は、ありませんありました。
vertical barだそうです。(コメントの方ありがとうございました!)
一応「たてぼう」で変換すると出てきます。

クロージャ

縦棒はクロージャの引数リストの開始と終了を示します。引数なしの縦棒のみの場合は、空の引数リストになります。型推論は働きます。

// 引数あり
let add = |a: i32, b: i32| -> i32 {a + b};
println!("{}", add(3, 5)); // 出力: 8

// 引数なし
let closure = || println!("Hello, world!");
closure();

キャプチャ

クロージャが定義したスコープ外にある変数を取り込むこと。
&なしでもコンパイラが自動借用してくれる。
Moveキーワードを入れると、キャプチャした変数の所有権が移動します。

// 不変借用
let x = 10;
let add_x = |a| a + x; // &x
println!("{}", add_x(5));

// 可変借用
let mut x = 10;
let mut add_x = |a| a + x; // &mut x
println!("{}", add_x(5));

// Move(所有権の移動)
let x = 10;
let add_x = move |a| a + x;
println!("{}", add_x(5)); // println!("{}", x)はコンパイルエラー

Discussion