Je souhaite écrire une fonction générique acceptant tout type de chaîne (&str
/String
) pour des raisons de commodité.Fonction générique acceptant & str ou déplacement Chaîne sans copie
La fonction a besoin en interne d'un String
, donc je voudrais aussi éviter une réallocation inutile si l'appelant appelle la fonction avec String
.
foo("borrowed");
foo(format!("owned"));
Pour accepter les références que je sais que je peux utiliser foo<S: AsRef<str>>(s: S)
, mais qu'en est-dans l'autre sens?
Je pense que l'argument générique basé sur ToOwned
pourrait fonctionner (fonctionne pour &str
, et je suppose qu'il est un non-op sur String
), mais je ne peux pas comprendre la syntaxe exacte.