استخدم OptionParser لتحليل الأوامر في روبي

في ال مقال يناقش ميزات OptionParser ناقشنا بعض الأسباب التي تجعل استخدام OptionParser فيه روبي يفضل البحث عبر ARGV يدويًا للتحليل أوامر باليد. حان الوقت الآن للتعرف على كيفية استخدام OptionParser وميزاته.

سيتم استخدام الكود التالي في جميع الأمثلة في هذا البرنامج التعليمي. لتجربة أي من الأمثلة ، ببساطة ضع الأمثلة opts.on حظر بجوار تعليق TODO. يؤدي تشغيل البرنامج إلى طباعة حالة الخيارات الموجودة و ARGV ، مما يسمح لك بفحص تأثيرات مفاتيحك.

#! / usr / bin / env ruby
تتطلب "optparse"
تتطلب "ص"
# ستحتوي هذه التجزئة على جميع الخيارات
# تحليل لغوي من سطر الأوامر
# OptionParser.
خيارات = {}
optparse = الخيار OptionParser.new | opts |
# TODO: ضع خيارات سطر الأوامر هنا
# هذا يعرض شاشة المساعدة ، جميع البرامج
# يفترض أن يكون هذا الخيار.
opts.on ("-h" ، "- مساعدة" ، "عرض هذه الشاشة")
يضع يختار
خروج
النهاية
النهاية
# تحليل سطر الأوامر. تذكر أن هناك شكلين
# طريقة التحليل. طريقة "التحليل" توزع ببساطة
# ARGV ، بينما "تحليل!" طريقة يوزع ARGV ويزيل
# أي خيارات موجودة هناك ، بالإضافة إلى أي معلمات لـ
# الخيارات. ما تبقى هو قائمة الملفات لتغيير حجمها.
optparse.parse!
ص "خيارات:" ، خيارات
ص "ARGV:" ، ARGV
instagram viewer

مفتاح بسيط

التبديل البسيط هو وسيطة بدون نماذج اختيارية أو بدون معلمات. سيكون التأثير هو ببساطة وضع علامة في الخيارات تجزئة. سيتم تمرير أية معلمات أخرى إلى على طريقة.

خيارات [: simple] = false
opts.on ('-s'، '- simple'، "Simple argument")
options [: simple] = صحيح
النهاية

التبديل مع المعلمة الإلزامية

تحتاج مفاتيح التبديل التي تأخذ معلمة فقط إلى ذكر اسم المعلمة في الشكل الطويل للمحول. فمثلا، "-f" ، "--ملف الملف" يعني أن -f أو --file يأخذ معلمة واحدة تسمى FILE ، وهذه المعلمة إلزامية. لا يمكنك استخدام إما -f أو --file بدون تمرير معلمة أيضًا.

الخيارات [: mand] = ""
opts.on ('-m'، '- Mandatory FILE'، "Mandatory argument") تفعل | f |
خيارات [: mand] = f
النهاية

التبديل مع المعلمة الاختيارية

لا يجب أن تكون معلمات التبديل إلزامية ، فقد تكون اختيارية. لإعلان معلمة المحول اختيارية ، ضع اسمها بين قوسين في وصف المحول. فمثلا، "--logfile [FILE]" يعني أن المعلمة FILE اختيارية. إذا لم يتم توفيره ، فسيفترض البرنامج وجود افتراضي سليم ، مثل ملف يسمى log.txt.

في المثال ، المصطلح أ = ب || ج يستخدم. هذا مجرد اختصار لـ "a = b ، ولكن إذا كان b خطأ أو لا شيء ، فإن a = c".

options [: opt] = false
opts.on ('-o'، '- اختياري [OPT]'، "وسيطة اختيارية") تفعل | f |
خيارات [: opt] = f || "لا شيئ"
النهاية

تحويل تلقائيا إلى تعويم

يمكن لـ OptionParser تحويل الوسيطة تلقائيًا إلى بعض الأنواع. أحد هذه الأنواع هو تعويم. لتحويل حججك تلقائيًا إلى مفتاح تبديل إلى تعويم ، قم بتمرير تعويم إلى على الطريقة بعد سلاسل وصف التبديل الخاص بك.

التحويلات التلقائية مفيدة. فهي لا توفر لك فقط خطوة تحويل السلسلة إلى النوع المطلوب ، ولكن أيضًا تحقق من التنسيق نيابة عنك وستتسبب في استثناء إذا تم تنسيقها بشكل غير صحيح.

خيارات [: تعويم] = 0.0
opts.on ('-f'، '--float NUM'، Float، "Convert to float") do | f |
خيارات [: تعويم] = و
النهاية

بعض الأنواع الأخرى التي يمكن لـ OptionParser تحويلها لتضمين الوقت وعدد صحيح تلقائيًا.

قوائم الحجج

يمكن تفسير الحجج على أنها قوائم. يمكن أن ينظر إليه على أنه تحويل إلى صفيف ، كما قمت بالتحويل إلى Float. بينما يمكن لسلسلة الخيار الخاصة بك تحديد المعلمة ليتم تسميتها "أ ، ب ، ج" ، فإن OptionParser سيسمح بشكل أعمى بأي عدد من العناصر في القائمة. لذا ، إذا كنت بحاجة إلى عدد محدد من العناصر ، فتأكد من التحقق من طول المصفوفة بنفسك.

خيارات [: list] = []
opts.on ('-l'، '- list a، b، c'، Array، "List of المعالم") do | l |
خيارات [: قائمة] = ل
النهاية

مجموعة من الحجج

في بعض الأحيان يكون من المنطقي قصر الحجج على التبديل إلى عدد قليل من الخيارات. على سبيل المثال ، لن يأخذ رمز التبديل التالي سوى معلمة إلزامية واحدة ، ويجب أن تكون المعلمة واحدة نعم, لا أو يمكن. إذا كانت المعلمة أي شيء آخر على الإطلاق ، فسيتم طرح استثناء.

للقيام بذلك ، قم بتمرير قائمة من المعلمات المقبولة كرموز بعد سلاسل وصف المحول.

خيارات [: set] =: نعم
opts.on ('-s'، '--set OPT'، [: yes،: no،: ربما]، "معلمات من مجموعة") |
خيارات [: set] = s
النهاية

أشكال سلبية

يمكن أن يكون للمفاتيح شكل سالب. مفتاح - سالب يمكن أن يكون لها تأثير عكسي يسمى - لا ينفي. لوصف هذا في سلسلة وصف التبديل ، ضع الجزء البديل بين قوسين: - [لا] نفي. إذا تم العثور على النموذج الأول ، فسيتم تمرير true إلى الكتلة ، وسيتم حظر false في حالة مواجهة النموذج الثاني.

options [: neg] = false
opts.on ('-n'، '- [no-] Negated'، "Negated Forms") do | n |
خيارات [: neg] = n
النهاية