2日目の勉強
所有権と借用
- 難しい
- いままで謎にコンパイルが通らなかったことがあるのは一部これが原因
- & は 値を不変な形で貸す
- &mut は値を可変な形で貸す(1度きり, 2度やるとコンパイルエラー)
所有権の問題でコンパイルできないコード
fn main() {
let data = format!("{}", "Hello, world");
print_data(data);
println!("{}", data);
}
fn print_data<T: std::fmt::Debug>(t: T) {
println!("{:?}", t);
}
所有権を解決したコード1
- return することで所有権を返してもらう
- 処理の中でほかに return
fn main() {
let mut data = format!("{}", "Hello, world");
data = print_data(data);
println!("{}", data);
}
fn print_data<T: std::fmt::Debug>(t: T) -> T {
println!("{:?}", t);
t
}
所有権を解決したコード2
fn main() {
let data = format!("{}", "Hello, world");
print_data(&data);
println!("{}", data);
}
fn print_data<T: std::fmt::Debug>(t: &T) {
println!("{:?}", t);
}
所感
- Rust っぽさを出すにはこのあたりが重要になってくるのかな、と思った
- Python を書く時に Rust の構文が出てくるようになってきてしまった
- 少しでも時間を取って勉強する習慣をつけていきたい
参考文献