Chcę napisać ogólną funkcję, która akceptuje dowolny ciąg (&str
/String
) dla wygody osoby dzwoniącej.Ogólna funkcja akceptująca & str lub przenoszenie Ciąg bez kopiowania
Funkcja wewnętrznie potrzebuje String
, więc chciałbym również uniknąć niepotrzebnego ponownego przydzielania, jeśli wywołujący wywołuje funkcję z String
.
foo("borrowed");
foo(format!("owned"));
za przyjmowanie odwołań wiem, że mogę używać foo<S: AsRef<str>>(s: S)
, ale co w inny sposób?
myślę generic argument oparty na ToOwned
może działać (działa na &str
i jestem przy założeniu, że jest to nie-op na String
), ale nie mogę dowiedzieć się dokładnie składni.