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

回答編集履歴

1

補足を追加しました

2016/03/20 16:59

投稿

tatsuya6502
tatsuya6502

スコア2055

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!()` がマクロとして定義されています)