質問するログイン新規登録

回答編集履歴

3

誤字を修正しました

2018/02/22 02:07

投稿

tatsuya6502
tatsuya6502

スコア2055

answer CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  > 確かに `z : &S` 経由で `s.y : &mut i32` にアクセスできてしまうと、 `s` の immutable な参照ならいくつでも作れてしまうので、 `S::y` という `&mut` な参照が複数作成できることになります。
32
32
 
33
- たとえば `S` に `fn f(&self)` というメソッドを実装したとき、`s.y` が変更できてしまうと問題があります。
33
+ たとえば `S` に `fn f(&self)` というメソッドを実装したとき、`self.y` が変更できてしまうと問題があります。
34
34
 
35
35
  > 1. どこを見て `z.y` を immutable reference としているのか `S::y` の型だけ見れば `&mut i32` なのに。
36
36
 

2

わかりやすさのために最初の段落を修正しました

2018/02/22 02:07

投稿

tatsuya6502
tatsuya6502

スコア2055

answer CHANGED
@@ -1,8 +1,8 @@
1
1
  > もし `S::y : &mut i32` が、 `a : S` または `a : &mut S` のときのみ `S::y : &mut i32` で、 `a : &S` のときは `S::y : &i32` となると見做される
2
2
 
3
- 私もそうだと思います。`struct` またはフィールドを借用する際、mutable かはフィールド定義(`&mut i32`)ではなく、親(構造体自体の mutability で決まるようです。
3
+ 私もそうだと思います。struct 体またはフィールドを借用する際、フィールドが mutable になるかは、struct のフィールド定義(`y: &mut i32`)ではなく、struct 自体の mutability で決まるようです。
4
4
 
5
- たとえば以下のように `y` フィールドだけ借用しようとしてもコンパイルできません。
5
+ たとえば以下のように `s` が immutable の時に `y` フィールドの mutable な参照作ろうとしてもコンパイルできません。
6
6
 
7
7
  ```rust
8
8
  fn baz2() {

1

わかりやすさのためにコードコメントを追加

2018/02/22 02:03

投稿

tatsuya6502
tatsuya6502

スコア2055

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  let mut x = 1;
10
10
  let mut v = 5;
11
11
  let s = S { y: &mut x };
12
- let z_y = &mut s.y;
12
+ let z_y = &mut s.y; // y フィールドだけ mut 借用
13
13
  *z_y = &mut v;
14
14
  }
15
15
  ```