実現したいこと
rustの仕組みを理解したい。
発生している問題・分からないこと
ソースコードで、
filter(|&x| x != a) -> コンパイルエラー
map(|&x| x + a) -> ok
となる理由が調べてみても、どうにもわかりません。
iter()は参照を返すのだから、|&x|でいいと思ってしまいます。
filter(|&&x| x != a)としないといけないのは、なぜなのでしょうか?
エラーメッセージ
error
1error[E0277]: can't compare `&{integer}` with `{integer}` 2 --> and.rs:6:45 3 | 46 | let v2: Vec<_> = c.iter().filter(|&x| x != a).collect(); // エラー 5 | ^^ no implementation for `&{integer} == {integer}` 6 | 7 = help: the trait `PartialEq<{integer}>` is not implemented for `&{integer}` 8help: consider dereferencing here 9 | 106 | let v2: Vec<_> = c.iter().filter(|&x| *x != a).collect(); // エラー 11 | + 12 13error: aborting due to 1 previous error
該当のソースコード
fn main() { let a = 3; let c = vec![3, 5, 8, 9, 4, 2, 5]; let v1: Vec<_> = c.iter().map(|&x| x + a).collect(); let v2: Vec<_> = c.iter().filter(|&x| x != a).collect(); // エラーが出る println!("{:?}", v1); println!("{:?}", v2); }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
google検索では、いまいち回答がない(探し方が悪いかも)。
chatGPTでは何度聞いても&xと&&xに違いがないように聞こえる。
補足
特になし
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/10/02 09:08