昨日に引き続き型をみていく。
|x| x + 2
みたいなやつ。Pythonでいうところのlambda式だろう。引数に受け取った値以外にも環境にある値を使えるらしい。さらに言えば変更できる。
let x = 4;
let adder = |n| n + x;
adder(2)
とか
let mut state = false;
let mut flipflop = || {
state = !state;
state
}
flipflop();
とかができる。なお、evcxr
環境では動かなかった。クロージャはその場で新しい型を定義しているため再代入はできないらしい。
Pythonのタプルに似ていろいろな型の値を混ぜて入れられる。要素数もコンパイル時に決まるため後から変更できない点も同じ。パターンマッチというのがアンパック代入に似ている
let (n1, b1) = (88, true);
println!("{} {}", n1, b1); // => 88 true
Pythonと違う点は以下の点。
let t1 = (88, true);
t1.0 // => 88
mut
をつけて宣言しておけば要素が変更可能。ただし型があっている必要がある。let mut t2 = (88, false);
t2.1 = true;
t2 // => (88, true)