回答編集履歴
4
cloned() について追記
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 トレイトがドキュメントにない問題について追記
test
CHANGED
@@ -86,4 +86,8 @@
|
|
86
86
|
|
87
87
|
|
88
88
|
|
89
|
-
|
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
質問の見落しを追記
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
トレイト名が誤っていたので修正
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
|
|