回答編集履歴
1
補足を追加しました
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
(raccy さんの解説による、破壊的メソッドについて書きます)
|
2
2
|
|
3
|
-
Rust では、レシーバを変更するかどうかは、メソッド名の慣習ではなく、メソッドの型シグネチャで示します。コンパイラにより検査されますので、破壊的メソッドを、そうと知らずに使うことはできません。
|
3
|
+
Rust では、レシーバを変更するかどうかは、メソッド名の慣習ではなく、メソッドの型シグネチャで示します。コンパイラにより検査されますので、**破壊的メソッドを、そうと知らずに使うことはできません。**
|
4
4
|
|
5
5
|
例えば、String の `push_str()` メソッドは、レシーバを変更します。
|
6
6
|
|
@@ -38,4 +38,9 @@
|
|
38
38
|
^~
|
39
39
|
```
|
40
40
|
|
41
|
-
これにより、`push_str()` が破壊的メソッドであることを、うっかり知らずに使ってしまうことが防げます。
|
41
|
+
これにより、`push_str()` が破壊的メソッドであることを、うっかり知らずに使ってしまうことが防げます。
|
42
|
+
|
43
|
+
---
|
44
|
+
**補足**
|
45
|
+
|
46
|
+
上の例で、`println!("{}", s1);` のように、`!` が付いているものがありますが、その意味は、Ruby のそれとは全く異なります。これは、`println!()` が、関数やメソッドではなくて、「マクロ」であることを示しています。(Rust では、可変長引数を取る関数やメソッドを定義できないため、`println!()` がマクロとして定義されています)
|