2009-02-24 5 views
43

अजगर में, एक मॉड्यूल नहीं है एक मुख्य कार्य करने के लिए, लेकिन यह निम्न मुहावरा उपयोग करने के लिए आम बात है:क्या मुझे अपनी रूबी स्क्रिप्ट में मुख्य विधि परिभाषित करनी चाहिए?

def my_main_function(): 
    ... # some code 

if __name__=="__main__": # program's entry point 
    my_main_function() 

मैं रूबी पता नहीं करता एक main के लिए विधि या तो, लेकिन क्या मुझे कुछ प्रकार का सर्वोत्तम अभ्यास करना चाहिए? क्या मुझे अपनी विधि main या कुछ नाम देना चाहिए?

Wikipedia page about main methods वास्तव में मेरी मदद नहीं करता है।


अतिरिक्त नोट के रूप में, मैं भी अजगर में निम्नलिखित मुहावरा देखा है:

def my_main_function(args=[]): 
    ... # some code 

if __name__=="__main__": # program's entry point 
    import sys 
    sys.exit(my_main_function(sys.argv)) 

उत्तर

74

मैं आमतौर पर

if __FILE__ == $0 
    x = SweetClass.new(ARGV) 
    x.run # or go, or whatever 
end 

तो हाँ, आप कर सकते हैं का उपयोग करें। यह सिर्फ उस पर निर्भर करता है कि आप क्या कर रहे हैं।

+2

यह अच्छी सलाह है:

एक आम पैटर्न lib/application.rb (या अधिमानतः एक ऐसा नाम है जो आपके डोमेन के लिए अधिक उपयुक्त है) और bin/आवेदन है, जो होता है एक स्टैंडअलोन निष्पादन योग्य और पुस्तकालय –

+0

+1 ठंडा दोनों के रूप में प्रयोग योग्य है। मेरे पास मूल रूप से एक ही चीज के लिए उबला हुआ एक और अधिक ठोस तरीका था। मैं इसे इसके साथ बदल दूंगा। –

+0

यदि आप रूबी-प्रोफेसर या पसंद का उपयोग कर रहे हैं तो सशर्त वांछित काम नहीं करता है। –

0

सं।

कोई वास्तविक लाभ के लिए जटिलता की एक अतिरिक्त परत क्यों जोड़ें? Rubyists के लिए कोई सम्मेलन नहीं है जो इसका उपयोग करता है।

मैं दूसरी बार जब तक आपको इसका उपयोग करने की आवश्यकता नहीं है, तब तक इंतजार करूँगा (जो संभवतः आपके विचार से कम होता है) और फिर इसे पुन: प्रयोज्य कर दें ताकि यह पुन: प्रयोज्य हो सके, जिसमें शायद उपरोक्त की तरह एक निर्माण शामिल होगा।

+4

लाभ यह है कि आपकी फ़ाइल लाइब्रेरी और एक स्क्रिप्ट दोनों हो सकती है। मैं हर समय इस मुहावरे का उपयोग करता हूं। – eremzeit

3

मेरे अंगूठे का व्यक्तिगत नियम है: पल

if __FILE__ == $0 
    <some code> 
end 

5 लाइनों से अधिक समय हो जाता है, मैं इसे main कार्य करने के लिए निकालें। यह पायथन और रूबी दोनों कोड के लिए सच है। उस कोड के बिना बस खराब संरचित दिखता है।

46

मुझे $0 का उपयोग करने से अधिक पढ़ने योग्य पाया गया है। आधा समय जब मैं उस तरह "पर्ल-जैसी" ग्लोबल्स देखता हूं, तो मुझे उन्हें देखना होगा।


if __FILE__ == $PROGRAM_NAME 
    # Put "main" code here 
end 
8

आपको पुस्तकालय कोड को lib/और execables में रखना चाहिए, जिसके लिए बिन/में लाइब्रेरी कोड की आवश्यकता होती है। RubyGems की पैकेजिंग विधि के साथ संगत होने का इसका अतिरिक्त लाभ है। इस तरह से, अपनी फ़ाइल -

require 'application' 
Application.run(ARGV) 
+0

मुझे लगता है कि आप यहां प्रश्न के बिंदु को याद कर चुके हैं ... – Perry

+0

यह एक उत्कृष्ट जवाब है। अपनी स्क्रिप्ट को ./bin में रखें और शीर्ष पर '#!/Usr/bin/env ruby' जोड़ें। फिर इसे निष्पादन योग्य बनाएं (chmod + x) और आपके पास ऐसा कुछ है जो अच्छी तरह व्यवस्थित और समझने में आसान है। – mastaBlasta

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

  • कोई संबंधित समस्या नहीं^_^