7
use std::collections::HashSet; fn character_count(needles: &HashSet<char>, needle_type: &str, input: &str) -> i32 { for needle in needles { let mut needle_custom; if needle_type == "double" { needle_custom = needle.to_string() + &needle.to_string(); } else { needle_custom = needle.to_string() + &needle.to_string() + &needle.to_string(); } if input.contains(needle_custom) { println!("found needle {:?}", needle_custom); } } return 1; } 
error[E0277]: expected a `std::ops::FnMut<(char,)>` closure, found `std::string::String` --> src/lib.rs:13:18 | 13 | if input.contains(needle_custom) { | ^^^^^^^^ expected an `FnMut<(char,)>` closure, found `std::string::String` | = help: the trait `std::ops::FnMut<(char,)>` is not implemented for `std::string::String` = note: required because of the requirements on the impl of `std::str::pattern::Pattern<'_>` for `std::string::String` 

The code works if I replace needle_custom with "test".

2
  • Its kind of a bummer that the error message mentions char because it makes it harder to diagnose as a common &str vs String issue Commented Feb 22, 2019 at 21:49
  • In the future, you are encouraged to search for your exact error message. In many cases, this will directly lead you to existing questions and answers. Commented Feb 24, 2019 at 19:35

1 Answer 1

7

The contains method will accept an &str or a char but not a String.

The contains method is declared as

pub fn contains<'a, P>(&'a self, pat: P) -> bool where P: Pattern<'a>, 

And if you look at the implementors of Pattern, you'll see its implemented for char and for &str.

This means that you need to pass a &str to contains instead of your owned String. Because &String coerces to &str, this is an easy change:

-- if input.contains(needle_custom) { ++ if input.contains(&needle_custom) { 

Here is your code with this small change working in the Playground.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.