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

回答編集履歴

1

説明を少し修正しました

2021/05/03 01:00

投稿

tatsuya6502
tatsuya6502

スコア2055

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の不変借用