ユーザ用ツール

サイト用ツール


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