質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

1555閲覧

エラーになる理由がわかりません

mosmos_21

総合スコア46

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2018/06/11 12:17

rustで文字列に含まれる各文字の数が奇数の物の数を求める関数を作りました。
コードは以下の通りです。

rust

1fn count_odd_chars(s: &str) -> usize { 2 let mut map: HashMap<char, i32> = HashMap::new(); 3 for ch in s.chars() { 4 *map.entry(ch).or_insert(0) += 1; 5 } 6 map.values() 7 .filter(|val| *val % 2 == 1) 8 .count() 9}

この関数を書いてるときに。

rust

1.filter(|val| val % 2 == 1)

と書いたところエラーになりました。
エラー文から推測して「*」を付けたらエラーが消えて実行可能になったのですが、
なぜこれでいいのか、なぜつけないとエラーになるのかよくわかりません。
理由がわかりましたらお教え願いませんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

filterの定義を確認してみましょう:

rust

1fn filter<P>(self, predicate: P) -> Filter<Self, P> where 2 P: FnMut(&Self::Item) -> bool {...}

|val| *val % 2 == 1をこのpredicateとしてあげているので、valの型は&i32だとコンパイラが推測します。なので値を取り出すには*valとするか、そもそも引数で|&val| val % 2 == 1のようにする必要があります。

&i32%演算子が定義されていれば良かったのですが、残念ながら現在はそういう実装にはなっていません。

投稿2018/06/11 13:03

termoshtt

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問