where
क्लॉज के अंदर परिभाषित विशेषता सीमाएं इनलाइन घोषित विशेषता सीमाओं का एक सुपरसेट है। इनलाइन शैली where
खंड से पहले मौजूद थी; where
खंड introduced in RFC 135 था:
where
खंड है, जो विशेषता पैरामीटर सीमा निर्दिष्ट करने की एक अधिक अर्थपूर्ण साधन उपलब्ध कराने जोड़ें। [...] मौजूदा सीमा नोटेशन where
खंडों के लिए वाक्य रचनात्मक चीनी के रूप में बने रहेगा।
यहाँ कि साथ काबू पाने कर रहे हैं वर्तमान सीमा वाक्य रचना के साथ सीमाओं की एक सूची है, जहां वाक्य रचना:
यह प्रकार पैरामीटर के अलावा और कुछ पर सीमा व्यक्त नहीं कर सकते। इसलिए, यदि आप एक समारोह T
में सामान्य है, तो आप T:MyTrait
घोषित करने के लिए है कि T
MyTrait
को लागू करना चाहिए लिख सकते हैं, लेकिन आप Option<T> : MyTrait
या (int, T) : MyTrait
नहीं लिख सकते हैं। ये रूप कम कम से कम आवश्यक हैं लेकिन अभी भी महत्वपूर्ण हैं।
यह संबंधित प्रकारों के साथ अच्छी तरह से काम नहीं करता है। ऐसा इसलिए है क्योंकि किसी संबंधित प्रकार के मान को निर्दिष्ट करने के लिए कोई स्थान नहीं है। अन्य भाषाएं इस उद्देश्य के लिए खंड (या कुछ समान) का उपयोग करती हैं।
यह पढ़ने के लिए बस इतना मुश्किल है। अनुभव दिखाया गया है कि सीमाओं की संख्या बढ़ने के साथ ही वर्तमान वाक्यविन्यास पढ़ने के लिए मुश्किल हो जाता है और प्रारूप।
तब से आप भी उपयोग कर सकते हैं उच्च रैंक वाले विशेषता एक where
खंड में सीमा (for <'a> ...
):
fn foo<T, U>()
where
// higher-ranked trait bounds
for<'a> T: SomethingElse<'a>,
// Bound not directly on the generic type
i32: From<U>,
T: Iterator,
// Bound on an associated type
T::Item: Clone,
// Just really long
U: ReallyLong + AnotherReallyLong + WowReallyLong,
{}
अपनी आवश्यकताओं इनलाइन विशेषता सीमा से पूरी की जा सकती है, तो आपके कोड पर कोई प्रभाव नहीं है। यदि आपको अतिरिक्त शक्तियों की आवश्यकता है जो केवल where
सक्षम करता है, तो आपको where
का उपयोग करने की आवश्यकता है।
मेरा व्यक्तिगत शैली को हमेशाwhere
फार्म का उपयोग है।नई सीमा जोड़ते समय git diff
पर एक भी आकार होना आसान है जो मेरे लिए कोड की अतिरिक्त रेखा के लायक है।
टीबीएच यह उन उदाहरणों में से एक है जहां मैं पायथन के जेन के लिए लंबा हूं :) इसके अलावा, ऐतिहासिक रूप से मामूली विसंगतियां हैं, मुझे याद है कि 'आकार' का उपयोग केवल थोड़ी देर के लिए 'जहां' खंड में किया जा सकता है। –
@MatthieuM। यह दूसरी तरफ था - 'आकार' केवल इनलाइन काम करता था। मुझे याद है क्योंकि मैं एक एकल शैली भी पसंद करता हूं ('जहां' का उपयोग करके) लेकिन यह 'आकार' के लिए काम नहीं करता है ... – Shepmaster