やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rustの定数(const)

 シャドーイングできるのか? など試してみた。

成果物

コード

main.rs

fn main() {
    //const value: i32 = 100; // warning: constant `value` should have an upper case name
    //value = 200; // error[E0070]: invalid left-hand side expression
    //value: i32 = 200; // error[E0658]: type ascription is experimental (see issue #23416)
    //const value: i32 = 200; // error[E0428]: the name `value` is defined multiple times
    const VALUE: i32 = 100;
    println!("VALUE is {}", VALUE);
}
$ rustc main.rs
$ ./main
VALUE is 100

警告: 定数名は大文字にしろ

const value: i32 = 100; // warning: constant `value` should have an upper case name

 そこまでいうならコードを自動的に生成してくれ。

エラー: 再代入できない

const value: i32 = 100;
value = 200; // error[E0070]: invalid left-hand side expression

 「無効な左辺式」だと怒られる。

 定数なのに再代入できたら、定数じゃないもの。でも、このエラーわかりにくい。なぜ無効なのか明言してほしい。

エラー: 再代入できない2

const value: i32 = 100;
value: i32 = 200;
// error[E0658]: type ascription is experimental (see issue #23416)
// error[E0070]: invalid left-hand side expression

 型を指定してみるも、やはり「無効な左辺式」だと怒られる。

 だがその前に「型割り当ては実験的です」という謎のエラー。なんぞこれ。

 なるほどわからん

エラー: 再宣言できない

const value: i32 = 100;
const value: i32 = 200; // error[E0428]: the name `value` is defined multiple times

 「名前 valueが複数回定義されています」と怒られる。

 letで宣言された変数はミュータブル、イミュータブルに関わらず再宣言するとシャドーイングされる。だが、定数(const)は上記のようにコンパイルエラーとなる。

 やはり定数はconstで宣言したほうが良さそう。

対象環境

$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

前回まで