回答編集履歴
1
説明を少し修正しました
answer
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
ご質問のコードでは使用するトレイトメソッドの指定はされておらず、また`func`に`mut`が必要なことから`call_mut(&mut self, ..)`が使われていることがわかります。ですから、そのクロージャは`FnMut`と`FnOnce`を実装していると考えられます。(`Fn`は実装されていない)
|
30
30
|
|
31
|
-
`Fn`が実装されていない理由ですが、`move_x()`が`&mut self`(ここでの`self`は`Point`)を要求するからです。`Fn`が要求するメソッドは`call(&self, ..)`ですが、`&`をとおして`&mut`を得ることができ
|
31
|
+
`Fn`が実装されていない理由ですが、`move_x()`が`&mut self`(ここでの`self`は`Point`)を要求するからです。`Fn`が要求するメソッドは`call(&self, ..)`ですが、`&`をとおして`&mut`を得ることができず、従って`Fn`を実装できません。`&`をとおして`&mut`を得られないことはご質問のコードに以下のコードを追加することで確認できます。
|
32
32
|
|
33
33
|
```rust
|
34
34
|
// Rectangleの不変借用
|