2017-08-06 62 views
8

爲了方便調用者,我想寫一個接受任何類型字符串(&str/String)的泛型函數。通用函數接受&str或移動字符串而不復制

該函數內部需要String,所以如果調用者使用String調用該函數,我還想避免不必要的重新分配。

foo("borrowed"); 
foo(format!("owned")); 

接受有關的其他方式,我知道我可以使用foo<S: AsRef<str>>(s: S)引用,但什麼?

我認爲基於ToOwned可能工作一般的參數(適用於&str,和我假設它是在String無操作),但我想不出確切的語法。

回答

10

我認爲你可以以後用Into trait來取得的成績,是這樣的:

fn foo<S: Into<String>>(s: S) -> String { 
    return s.into(); 
} 

fn main() { 
    foo("borrowed"); 
    foo(format!("owned")); 
} 
相關問題