Rust備忘録002

コードや理解が間違っているところがあったらコメントで教えてください。

 

所有権について

fn main() {
    let v1 = vec![1, 2, 3];
    let h = run(v1);
    println!("{}", v1[0]);
    /// この場合、use of moved value: `v1`というエラーになる。
    /// 理由は、let h = run(v1);のところでv1をムーブ(所有権を別のものに送ること。)
    /// しているため、v1にアクセスできない。
}
fn run(v1: Vec<i32>) -> i32{
    return 42;
}

この場合、参照型にすればよい。

fn main() {
    let mut v1 = vec![1, 2, 3];
    let h = run(&v1);
    println!("{}", v1[0]);
}
fn run(v1: &Vec<i32>) -> i32{
    return 42;
}

ただ、この場合、v1はrunにおいて、値が変更不可になる。

参照渡しするには、&mutをつかう。

fn main() {
    let mut v1 = vec![1, 2, 3];
    let h = run(&mut v1);
    println!("{}", v1[0]);
    ///2が出力される。
}
fn run(v1: &mut Vec<i32>) -> i32{
    v1[0] = 2;
    return 42;
}

このように、参照型の効果を保ちつつ、参照渡しができる。

この所有権についてもっと詳しく知りたい場合は、

https://rust-lang-ja.github.io/trpl-ja-pdf/a4.pdf

を読んでみることをおすすめする。

所有権以外にもRustの基本文法や使い方が載っている。