2017-08-06 6 views
8

कॉपी किए बिना मैं एक सामान्य फ़ंक्शन लिखना चाहता हूं जो कॉलर की सुविधा के लिए किसी भी प्रकार की स्ट्रिंग (&str/String) स्वीकार करता है।कॉलर की सुविधा के लिए जेनेरिक फ़ंक्शन स्वीकार्य और स्ट्र या हिलिंग स्ट्रिंग

समारोह आंतरिक रूप से एक 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")); 
} 
संबंधित मुद्दे