2017-08-10 7 views
6

use घोषणाओं को रखने की अनुशंसित जगह कहां है? मुझे पुस्तक, एफएक्यू, मेलिंग सूचियों या ऑनलाइन मंचों में पुस्तक में कोई निर्णायक उत्तर नहीं मिला। मैं जंग में एक नई परियोजना शुरू कर रहा हूं और मैं तुरंत सही दृष्टिकोण प्राप्त करना चाहता हूं।जंग में 'उपयोग' घोषणाओं को रखने के लिए अनुशंसित जगह कहां है?

निम्न दो दृष्टिकोणों में से एक है सिफारिश की है? क्या यह केवल "एलियासिंग" सामान के लिए है या यह अधिक करता है, जैसे मॉड्यूल को प्रारंभ करना, अगर इसका पहले उपयोग नहीं किया गया है?

use std::io; 
use std::io::Write; 

fn some_func() ->() { 
    [...] // We assume we need std::io here 
} 

fn some_other_func() ->() { 
    [...] // We assume we need std::io and std::io::Write here 
} 

या

fn some_func() ->() { 
    use std::io; 
    [...] // We assume we need std::io here 
} 

fn some_other_func() ->() { 
    use std::io; 
    use std::io::Write; 
    [...] // We assume we need std::io and std::io::Write here 
} 
+3

स्टाइल से संबंधित प्रश्नों पर चर्चा के लिए 'एफएमटी-आरएफसीएस रेपो' है। [इस मुद्दे] में (https://github.com/rust-lang-nursery/fmt-rfcs/issues/24) वे अभी तक स्पष्ट सहमति के बिना 'उपयोग' आयात पर चर्चा कर रहे हैं। वे मॉड्यूल-स्तरीय आयात बनाम फंक्शन-स्तरीय आयात के बारे में बहुत कुछ नहीं बोलते हैं। मेरे अनुभव में, लगभग सभी चीजें मॉड्यूल स्तर पर आयात की जाती हैं, खासकर जो कई कार्यों में उपयोग की जाती हैं। व्यक्तिगत रूप से, मुझे लगता है कि मैं केवल फ़ंक्शन-स्तरीय आयात का उपयोग करता हूं जब मेरे पास एक बहुत ही विशिष्ट आयात या ग्लोब-आयात होता है जिसे मैं गुंजाइश करना चाहता हूं। लेकिन मुझे लगता है कि जुड़े मुद्दे में एक नियम स्थापित किया जाना चाहिए। –

+0

मुद्दे पर चर्चा के लिए धन्यवाद, यह बहुत दिलचस्प है! Enum मामले के लिए – achedeuzot

उत्तर

4

टी एल; डॉ: सॉफ्टवेयर के लगभग हर अन्य टुकड़ा की तरह, यह तुम क्या कर रहे पर निर्भर करता है। मैंने जो आम शैली देखी है (और खुद को पसंद करते हैं) उन्हें फ़ाइल के शीर्ष पर रखना है और केवल उन्हें आवश्यकतानुसार संक्षिप्त दायरे में ले जाना है।


आम तौर पर, मैं किसी भी extern crate और mod बयान के बाद सीधे use बयान रखकर शुरू करने की सलाह देते हैं, एक रिक्त पंक्ति से अलग कर दिया:

extern crate foo; 
extern crate bar; 

mod interesting; 

use std::collections::HashMap; 
use foo::Foo; 
use bar::{Quux, moo};  
use interesting::something;  

// structs, functions, etc. 

मैं तथ्य यह है कि यह डिफ़ॉल्ट आधार - अधिकांश समय - एक आयात कई शीर्ष-स्तरीय वस्तुओं में उपयोग किया जाता है। इस प्रकार, यह केवल एक बार आयात करने के लिए समझ में आता है।

ऐसे समय होते हैं जहां imported traits have conflicting methods, और उन मामलों में जहां आयात की आवश्यकता होती है वहां आयात का दायरा होता है। वहाँ भी मामले हैं, जहां मैं भारी एक भी enum के साथ काम कर रहा हूँ और enum का नाम फिर से बताते हुए से बचने के लिए यह ग्लोब आयात करना चाहते हैं:

fn foo(e: MyEnum) { 
    use MyEnum::*; 

    match e { 
     One => 1, 
     Two => 2, 
    } 
} 

कुछ मामलों में, use बयान परस्पर विरोधी संकेत मिलता है कि आप भी प्रयास कर रहे हैं एक फ़ाइल में बहुत कुछ और इसे अलग फाइलों में विभाजित किया जाना चाहिए और फिर use कथन अब संदिग्ध नहीं हैं।

+1

+1; मैं 'मिलान' (और रेखा की लंबाई) में टाइपिंग को सहेजने के लिए बहुत कुछ उपयोग करता हूं, लेकिन यह वास्तव में शीर्ष-स्तर मॉड्यूल को वहां उपयोग करने के लिए प्रदूषित करेगा। –

संबंधित मुद्दे