يأتي Ruby مزودًا بأداة قوية ومرنة لتحليل خيارات سطر الأوامر ، OptionParser. بمجرد أن تتعلم كيفية استخدام هذا ، لن تعود أبدًا إلى البحث عبر ARGV يدويًا. يحتوي OptionParser على عدد من الميزات التي تجعله جذابًا تمامًا لمبرمجي روبي. إذا كنت قد قمت بتحليل الخيارات يدويًا في Ruby أو C ، أو باستخدام getoptlong دالة C ، سترى مدى الترحيب ببعض هذه التغييرات.
- OptionParser هو جاف. ما عليك سوى كتابة مفتاح تبديل سطر الأوامر ، وسيطاته ، ورمز التشغيل عند مواجهته ، ووصف رمز تبديل سطر الأوامر مرة واحدة في البرنامج النصي. ستقوم OptionParser تلقائيًا بإنشاء شاشات مساعدة لك من هذا الوصف ، بالإضافة إلى استنتاج كل شيء يتعلق بالوسيطة من الوصف الخاص بها. على سبيل المثال ، سوف تعرف - ملف [ملف] الخيار اختياري ويأخذ حجة واحدة. أيضا ، سوف تعرف ذلك - [- لا] - فرض هو حقا خياران ، وسوف تقبل كلا النموذجين.
- يقوم OptionParser تلقائيًا بتحويل الخيارات إلى فصل معين. إذا كان الخيار يأخذ عددًا صحيحًا ، فيمكنه تحويل أي سلسلة مرت على سطر الأوامر إلى عدد صحيح. هذا يقلل من بعض الملل المشاركين في تحليل خيارات سطر الأوامر.
- كل شيء موجود للغاية. جميع الخيارات موجودة في نفس المكان ، ويكون تأثير الخيار بجوار تعريف الخيار. إذا كان لا بد من إضافة الخيارات أو تغييرها أو إذا أراد شخص ما أن يرى ما يفعله ، فهناك مكان واحد فقط للبحث عنه. بمجرد تحليل سطر الأوامر ، ستظهر علامة تجزئة واحدة أو OpenStruct النتائج.
بما فيه الكفاية بالفعل ، أرني بعض الرموز
لذلك هنا مثال بسيط على كيفية الاستخدام OptionParser. لا يستخدم أي من الميزات المتقدمة ، فقط الأساسيات. هناك ثلاثة خيارات ، واحد منهم يأخذ المعلمة. جميع الخيارات إلزامية. هناك هي -v / - مطوّل و -q / - سريعة الخيارات ، وكذلك -l / - ملف السجل اختيار. بالإضافة إلى ذلك ، يأخذ البرنامج النصي قائمة بالملفات بشكل مستقل عن الخيارات.
#! / usr / bin / env ruby
# سيناريو يتظاهر بتغيير حجم عدد من الصور
تتطلب "optparse"
# هذه التجزئة سوف تعقد جميع الخيارات
تحليل # من سطر الأوامر بواسطة
# OptionParser.
خيارات = {}
optparse = OptionParser.new do | opts |
# تعيين لافتة ، عرض في الأعلى
# من شاشة المساعدة.
opts.banner = "الاستخدام: optparse1.rb [خيارات] file1 file2 ..."
# حدد الخيارات ، وماذا يفعلون
خيارات [: مطول] = خطأ
opts.on ('-v'، '- verbose'، 'Output more information')
خيارات [: مطول] = صحيح
النهاية
خيارات [: سريعة] = خطأ
opts.on ('-q'، '- quick'، 'تنفيذ المهمة بسرعة') القيام به
خيارات [: سريع] = صحيح
النهاية
خيارات [: logfile] = لا شيء
opts.on ('-l'، '- logfile FILE'، 'Write log to FILE') do | file |
خيارات [: logfile] = ملف
النهاية
# هذا يعرض شاشة المساعدة ، جميع البرامج
# يفترض أن يكون هذا الخيار.
opts.on ('-h'، '- help'، 'Display this screen') القيام به
يضع opts
خروج
النهاية
النهاية
# تحليل سطر الأوامر. تذكر أن هناك شكلين
# من طريقة التحليل. الطريقة "تحليل" ببساطة يوزع
# ARGV ، في حين أن "تحليل!" يوزع طريقة ARGV ويزيل
# أي خيارات موجودة هناك ، وكذلك أي معلمات لـ
# الخيارات. ما تبقى هو قائمة الملفات لتغيير حجمها.
optparse.parse!
يضع "يجري مطوّل" إذا كانت الخيارات [: مطول]
يضع "أن تكون سريعًا" إذا كانت الخيارات [: سريعة]
يضع "خيارات التسجيل في ملف # {[logfile]}" إذا كانت الخيارات [: logfile]
ARGV.each يفعل | f |
يضع "تغيير حجم الصورة # {f} ..."
ينام 0.5
النهاية
فحص الكود
لتبدأ ، optparse مطلوب مكتبة. تذكر ، هذه ليست جوهرة. يأتي مع روبي ، لذلك ليس هناك حاجة لتثبيت الأحجار الكريمة أو الطلب روبي جيمز قبل optparse.
هناك شيئان مثيران للاهتمام في هذا البرنامج النصي. الأول هو خيارات، المعلنة في أعلى نطاق. إنها فارغة بسيطة التجزئة. عندما يتم تحديد الخيارات ، يكتبون قيمهم الافتراضية إلى هذا التجزئة. على سبيل المثال ، السلوك الافتراضي لهذا البرنامج النصي هو ليس يكون مطول ، لذلك خيارات [: مطوّل] تم تعيينه على خطأ. عندما تصادف خيارات في سطر الأوامر ، فإنها ستغير القيم في خيارات لتعكس تأثيرها. على سبيل المثال ، متى -v / - مطوّل مصادفة ، سيتم تعيينها لـ true خيارات [: مطوّل].
الشيء الثاني المثير للاهتمام هو optparse. هذا ال OptionParser الاعتراض نفسه. عندما تقوم ببناء هذا الكائن ، فإنك تمر عليه كتلة. يتم تشغيل هذه الكتلة أثناء الإنشاء وستقوم ببناء قائمة خيارات في هياكل البيانات الداخلية ، والاستعداد لتحليل كل شيء. في هذه الكتلة يحدث كل السحر. يمكنك تحديد جميع الخيارات هنا.
تحديد الخيارات
يتبع كل خيار نفس النمط. تكتب أولاً القيمة الافتراضية في التجزئة. سيحدث هذا بمجرد OptionParser انه مبني. بعد ذلك ، يمكنك استدعاء علىطريقة، الذي يحدد الخيار نفسه. هناك عدة أشكال لهذه الطريقة ، ولكن يتم استخدام واحد فقط هنا. تسمح لك النماذج الأخرى بتعريف تحويلات النوع التلقائية ومجموعات القيم التي يقتصر الخيار عليها. الحجج الثلاثة المستخدمة هنا هي الشكل القصير ، والشكل الطويل ، ووصف الخيار.
ال على ستستنتج الطريقة عددًا من الأشياء من الشكل الطويل. شيء واحد سيستنتج هو وجود أي معلمات. إذا كان هناك أي معلمات موجودة في الخيار ، فسيتم تمريرها كمعلمات إلى الكتلة.
في حالة مواجهة الخيار في سطر الأوامر ، يتم تمرير الكتلة إلى على يتم تشغيل الطريقة. هنا ، لا تفعل الكتل الكثير ، فهي تحدد القيم فقط في تجزئة الخيارات. يمكن القيام بالمزيد ، مثل التحقق من وجود ملف مشار إليه ، إلخ. إذا كان هناك أي أخطاء ، يمكن طرح استثناءات من هذه الكتل.
وأخيرًا ، يتم تحليل سطر الأوامر. يحدث هذا عن طريق استدعاء تحليل! طريقة على OptionParser موضوع. في الواقع هناك شكلين من هذه الطريقة ، تحليل و تحليل!. كما يشير الإصدار مع علامة التعجب ، فهي مدمرة. لا يقوم فقط بتحليل سطر الأوامر ، ولكنه سيزيل أي خيارات تم العثور عليها ARGV. هذا شيء مهم ، سيترك فقط قائمة الملفات المقدمة بعد الخيارات في ARGV.