p75: 「構造体のフィールドを借用しコンパイルエラーとなる例」について
mosmos21 opened this issue · 5 comments
mosmos21 commented
素晴らしい書籍の執筆ありがとうございます。
書籍を読み進めるにあたり、誤植の発見とサンプルコードについての挙動の疑問がありましたので質問させてください。
誤植について
該当コード
for elm in xy.x.iter() {
y.push(*elm * *elm);
}
以下が正しいかと思われます。ご確認お願いします。
for elm in xy.x.iter() {
xy.y.push(*elm * *elm);
}
コンパイルエラーについて
サンプルコードをコンパイルしてみたところエラーが出ませんでした。(playgroundのリンク)
rustのバージョンアップにより挙動が変わっている可能性が考えられますので、ご確認お願います。
ytakano commented
ありがとうございます!
たしかに、ここの説明はおかしい気がします。
少し考えます。
ytakano commented
以下のようなコードを想定していました。もう少し良い例がないか、考えます。
#[derive(Debug)]
struct XY {
x: Vec<i32>,
y: Vec<i32>,
}
fn main() {
let mut xy = XY {
x: vec![1, 2, 3],
y: Vec::new(),
};
xy.update(&xy.x); // コンパイルエラー
println!("{:?}", xy);
}
impl XY {
fn update(&mut self, x: &[i32]) {
for elm in x.iter() {
self.y.push(*elm * *elm);
}
}
}
ytakano commented
こちら正誤表に記載させて頂きました。
ありがとうございます。
w-ockham commented
ハマりがちなポイントなので大変参考になりました。
この例のエラーが分配束縛などでどのように解消できるか、修正結果も正誤表に追加していただけないでしょうか。