rust:spec
文書の過去の版を表示しています。
Rustの言語仕様
所有権
以下のコードはエラーになる
fn print(a: String) { println!("{}", a) } let s = String::new("str"); print(s); print(s); // エラー
最初のprint関数に渡した時点で変数sはStringインスタンスの所有権を失っており、それ以降の行でアクセスするとエラーになる。
参照
所有権を失わずにデータを渡す方法として参照がある。
fn print(a: &String) { println!("{}", a) } let s = String::new("str"); print(&s); print(&s); // 今度はOK
不変
参照は基本的にで変更不可である
fn print(a: &String) { a.insert_str(0, "nyan"); // 参照を変更しようとするとエラーになる println!("{}", a) } let s = String::new("wang"); print(&s); print(&s);
参照を変更したいときはmutable参照型として定義し、引数も変更可能な参照型を受け取るようにする
fn print(a: &mut String) { a.insert_str(0, "nyan"); // mutable参照なので変更可能 println!("{}", a) } let s = &mut String::new("wang"); print(s); // wangnyanと出力 print(s); // wangnyannyanと出力
ライフタイム
rust/spec.1656321275.txt.gz · 最終更新: 2022/06/27 09:14 by nullpon