Rustのconst fn
Rustのconst fnでabs
Rustのconst fnの制限が緩和された(Rust 1.33.0)
Rust 1.39.0でabsがconst fnになる
上記の記事の関連・続きみたいなものです。
Rustのconst fnの制限がさらに緩和された
Rust 1.46.0でconst fn
の制限が更に緩和されました。
変更内容
下記が使用できるようになりました
-
if
,if let
,match
-
while
,while let
,loop
-
&&
演算子,||
演算子
for
は使用できないままですが変数は使用できるのでほぼ普通の関数と変わらない書き方ができるようになりました。
for
は使用できない
上で書きましたがfor
は使用できません。
しかし変数は使用できるのでn回ループみたいなことはwhile
とlet
で代用できます。
1~10までの合計を返す
const fn foo() -> i32 {
let mut i = 1;
let mut sum = 0;
while i <= 10 {
sum += i;
i += 1;
}
sum
}
引数で渡されたスライスの要素の合計を返す
const fn sum(a: &[i32]) -> i32 {
let len = a.len();
let mut i = 0;
let mut s = 0;
while i < len {
s += a[i];
i += 1;
}
s
}
abs
を書いてみる
過去にabs
を書いていたので1.46.0でどうなったのか書きます
const fn abs(value: i32) -> i32 {
if value >= 0 {
value
} else {
-value
}
}
普通の関数と変わらないです。
所感
ほぼ普通の関数と変わらない書き方ができるようになってきました。
シンプルな関数ならとりあえずconstつけといても困らないんじゃないでしょうか?
1.31.0や1.39.0のときみたいな苦労・工夫をしなくていいのはありがたいです。