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
で宣言したほうが良さそう。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- rustc 1.34.2 (6c2484dc3 2019-05-13)
- cargo 1.34.0 (6789d8a0a 2019-04-01)
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux
前回まで
- Rustを学んでみたい(プログラミング言語)
- Rustの環境構築
- RustでHelloWorld
- Rustの和訳ドキュメント
- Cargoでプロジェクト作成・ビルド・実行
- クレートとは?
- Rustで関数を使ってみる
- Rustでモジュールを使ってみる
- Rustで乱数を生成する(rand)
- Rustで標準入力する(std::io::stdin().read_line())
- RustでMatch判定する(match)
- Rustでprintとread_lineを1行にする方法
- Rustで数当てゲーム
- クレート名にドット.が使えない
- Rustの変数と可変性(let, mut) error[E0384]: cannot assign twice to immutable variable
x
- Rustのimmutable束縛とconst定数の違い
- RustのREPL、evcxrのインストールに失敗した
- Rustでコンパイルするときの変数未使用warningを消す
- Rustの変数(再代入、再宣言(シャドーイング))
- Rustのシャドーイングについて
- イミュータブルについて(副作用)