「Rustの所有権が難しい」という話しがときどきありますが、所有権システムの理解を助ける記事にしてみたいと思います。 所有権とはリソースを開放する権利のこと 所有権とは関数がリソース(資源)を開放する権利のことです。所有するというより消費されてしまうイメージに近いです。 以下のように変数の束縛での解説が多いですが、たぶんつまずくのは関数のほうかなと。 let a = String::from("abc"); let b = a; println!("{}", a); // bに所有権が移動するのでコンパイルエラー let c: u32 = 1; let d: u32 = c; println!("c = {}, d = {}", c, d); // 基本データ型はCopyトレイトを実装しているのでコンパイル可能 というわけで、ここから関数の例で解説します…。 以下のfoo関数はb: Bar