مصطلحات روبي لاستخدام خيارات سطر الأوامر

StackOverflow https://stackoverflow.com/questions/38713

  •  09-06-2019
  •  | 
  •  

سؤال

أحاول التقاط روبي عن طريق نقل برنامج بيرل متوسط ​​الحجم (غير OO).إحدى التعابير الشخصية الخاصة بي هي تعيين خيارات مثل هذا:

use Getopt::Std;
our $opt_v;  # be verbose
getopts('v');
# and later ...
$opt_v && print "something interesting\n";

في لغة Perl، أصر على أن أصر على أسناني وأترك ​​$opt_v يكون (بشكل فعال) عالميًا.

في روبي، سيكون المعادل الدقيق أكثر أو أقل

require 'optparse'
    opts.on("-v", "--[no-]verbose", TrueClass, "Run verbosely") {
        |$opt_verbose|
    }
    opts.parse!
end

حيث $opt_verbose هو عالمي يمكن للفئات الوصول إليه.يبدو أن معرفة الفصول الدراسية بالأعلام العالمية كهذه ...إيه ...خطأ.ما هي الطريقة الاصطلاحية OO للقيام بذلك؟

  • دع الروتين الرئيسي يعتني بجميع الأشياء المتعلقة بالخيارات ويطلب من الفصول فقط إعادة الأشياء إليها التي تقرر كيفية التعامل معها؟
  • هل تنفذ الفصول سلوكًا اختياريًا (على سبيل المثال، تعرف كيف تكون مطولًا) وتعيين الوضع عبر نوع attr_writer؟

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

هل كانت مفيدة؟

المحلول

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

أميل نحو استخدام هذه التقنية، حيث يتم تضمين الخيارات في كائن واحد واستخدام إما attr_writers أو معلمات الخيار في استدعاءات الطريقة لتمرير الخيارات ذات الصلة إلى أي كائنات إضافية.بهذه الطريقة، يمكن عزل أي كود موجود في الفئات الخارجية عن الخيارات نفسها - لا داعي للقلق بشأن تسمية المتغيرات في الروتين الرئيسي من داخل thingy فئة إذا تم تعيين الخيارات الخاصة بك مع thingy.verbose=true attr_writer أو thingy.process(true) يتصل.

نصائح أخرى

ال com.optparse تعد المكتبة جزءًا من التوزيع القياسي، لذا ستتمكن من استخدامها دون الحاجة إلى أي عناصر تابعة لجهة خارجية.

لم أستخدمه شخصيًا، لكن يبدو أن القضبان تستخدمها على نطاق واسع و كذلك يفعل rspec, ، والذي أعتقد أنه تصويت قوي جدًا بالثقة

هذا المثال من القضبان script/console يبدو أنه يوضح كيفية استخدامه بسهولة ولطف

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top