関数ポインタの利用
fn double(n: i32) -> i32 {
n + n
}
fn abs(n: i32) -> i32 {
if n >= 0 {
n
} else {
-n
}
}
fn main() {
// doubleの関数ポインタをfへ束縛
let mut f: fn(i32) -> i32 = double;
assert_eq!(f(-42), -84);
// absの関数ポインタをfへ束縛
f = abs;
assert_eq!(f(-42), 42);
}
関数ポインタを配列に格納して利用
fn double(n: i32) -> i32 {
n + n
}
fn abs(n: i32) -> i32 {
if n >= 0 {
n
} else {
-n
}
}
fn main() {
// 型推論があるため冗長だが、型も明記
let calc_tbl: [fn(i32)->i32;2] = [double,abs];
assert_eq!(calc_tbl[0](-42), -84);
assert_eq!(calc_tbl[1](-42), 42);
}