回答編集履歴

4

cloned() について追記

2018/09/24 03:11

投稿

Eki
Eki

スコア429

test CHANGED
@@ -86,6 +86,18 @@
86
86
 
87
87
 
88
88
 
89
+ あるいは、コメント欄で qnighy さんからご指摘を頂いたように `cloned()` を使う方法もあります。これはイテレータを受け取って、各要素を `clone()` したものを生成するイテレータを返す関数です。ドキュメントによると、少なくとも整数に関しては上と等価です。こちらの関数を使うのが Rust 的には自然と言えるでしょう。
90
+
91
+
92
+
93
+ ```rust
94
+
95
+ let set: HashSet<char> = ['a', 'b'].into_iter().cloned().collect();
96
+
97
+ ```
98
+
99
+
100
+
89
101
  `Copy` トレイトが `i32` などに書かれていない問題ですが、改めて [最新のドキュメント](https://doc.rust-lang.org/std/marker/trait.Copy.html) をあたってみるときちんと対応されていました。あなたがご覧になっているリファレンスは URL を良く見ると Rust 1.25 時点のものです。 Google などで検索して辿りつくページはなぜかこのバージョンがすごくまちまちで、いつも困ります。[ここは常に最新](https://doc.rust-lang.org/std/)なので、ふだんはこちらをブックマークして、ドキュメント内の検索機能を使うとか、ターミナルに `rustup doc --std` と入力することであなたのパソコン内にあるオフラインのドキュメントを開くこともできます。
90
102
 
91
103
 

3

Copy トレイトがドキュメントにない問題について追記

2018/09/24 03:11

投稿

Eki
Eki

スコア429

test CHANGED
@@ -86,4 +86,8 @@
86
86
 
87
87
 
88
88
 
89
- 確かに `i32` のリファレスに `Copy` は書かれていませんね...このあたりの理由はせんよく分かりませんだ、 `i32` や `char` `Copy` であることは事実です。
89
+ `Copy` トレイトが `i32` などに書かれていない問題ですが、改めて [最新ドキュメト](https://doc.rust-lang.org/std/marker/trait.Copy.html) をあたってみるときちんと対応されていました。あがご覧になっているリファレンスは URL を良く見ると Rust 1.25 時点のものです。 Google などで検索して辿つくページはなぜかこバージョンがごくちまちでいつも困りま[ここは常に最新](https://doc.rust-lang.org/std/)なので、ふんはこちらをブックマークしてドキュメント内の検索機能を使うとか、ターミナルに `rustup doc --std` と入力することであなたのパソコン内にあオフラインのドキュメントを開くこときます。
90
+
91
+
92
+
93
+ 原因について調べると [こちら](https://github.com/rust-lang/rust/issues/25893) が見つかりました。`Copy` トレイトはコンパイラによって特別扱いされるトレイトですので、普通のトレイトとは訳が違います。ドキュメントは **ソースコードから** 生成されますが、プリミティブについてはコンパイラ内で扱われるビルトインなものだったので明示的な実装がなく、ドキュメントにはのっていなかったようです。現在は明示的な実装が置かれたため、ドキュメントにのりました。

2

質問の見落しを追記

2018/09/23 21:26

投稿

Eki
Eki

スコア429

test CHANGED
@@ -83,3 +83,7 @@
83
83
  let set: HashSet<char> = ['a', 'b'].into_iter().map(|x| *x).collect();
84
84
 
85
85
  ```
86
+
87
+
88
+
89
+ 確かに `i32` のリファレンスに `Copy` は書かれていませんね...。このあたりの理由はすみません、よく分かりません。ただ、 `i32` や `char` が `Copy` であることは事実です。

1

トレイト名が誤っていたので修正

2018/09/23 09:11

投稿

Eki
Eki

スコア429

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- `into_iter()` は `IntoIter` トレイトにより提供されます。現在対象となっている `['a', 'b']` は `[char; 2]` ですが、 [ドキュメント](https://doc.rust-lang.org/1.25.0/std/iter/trait.IntoIterator.html#tymethod.into_iter) によると、`[char; 2]` に対する直接の実装はありません。しかし次の実装はあります。
41
+ `into_iter()` は `IntoIterator` トレイトにより提供されます。現在対象となっている `['a', 'b']` は `[char; 2]` ですが、 [ドキュメント](https://doc.rust-lang.org/1.25.0/std/iter/trait.IntoIterator.html#tymethod.into_iter) によると、`[char; 2]` に対する直接の実装はありません。しかし次の実装はあります。
42
42
 
43
43
 
44
44