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

هنا مقتطف من الموقع الرسمي pry
:
يعد Pry بديلاً قوياً لملف Ruby IRB القياسي. مع تسليط الضوء على بناء الجملة ، بنية البرنامج المساعد مرنة ، ومكالمات وقت التشغيل ، وعرض المصدر والوثائق .
وهذه ليست مجرد بلاه بلاه بلاه الإعلان. هذا صحيح. سأعرض كيفية تثبيت وضبط pry
مع كل الأجراس وصفارات لإرضاء المطور الأكثر تطوراً. من المفترض أن إصدار العمل الحالي من Ruby مثبت ويعمل على الجهاز المستهدف.
تدريب
انتقل إلى وحدة التحكم وقم بتشغيل الأمر:
$ gem install pry pry-theme awesome_print coderay
كل شيء ، نحن مستعدون تماما. دعنا نركض ... ونتأكد من عدم وجود فرق مقارنةً بـ irb
. فجأة ليست لطيفة جدا.
حسنًا ، دعنا نعلِّم pry
يكون النحل أكثر ذكاءً.
ملف التكوين
هذا هو .pryrc
. يوجد بالفعل ملف تكوين في الدليل الرئيسي يوضح كيفية البحث وكيفية التصرف في مجتمع لائق. إذا لم يكن الأمر كذلك ، يمكنك إنشائه باستخدام الأمر cd && touch .pryrc
.
دقيق ملء تعليمات .pryrc
سأقوم بعرض الخصائص المختلفة للخطوة خطوة بخطوة. gist .pryrc
الصبر: gist .pryrc
.
المحرر الافتراضي
Pry.editor = 'vi'
يقوم بتكوين المحرر الذي سيتم استخدامه لتحرير السياق الحالي (أمر edit
).
موجه الأوامر
Pry.config.prompt = [ ->(_obj, _nest_level, _) { "✎ " }, ->(*) { " " } ]
.pryrc
هو مجرد ملف .pryrc
، لذلك يمكن لهذه العملية تنفيذ أي تعليمات برمجية تريدها ، أو حتى استخراج عملات البيتكوين أثناء انتظار ظهور المطالبة التالية.
يمكن رسم المستوى الأول والمستويات المتداخلة (الكتل الداخلية) بطرق مختلفة. في السابق ، كنت أستخدم مثلثًا أسود مظللًا ، والذي يوزع محللًا غبيًا للمستوى الأول و ▷ للأحرف المتداخلة ، لكن تدريجياً توصلت إلى استنتاج مفاده أن عدم وجود أي أحرف غريبة داخل القصاصة يجعل نسخ الشظية في أي مكان أسهل بكثير. لذلك هكذا.
اللون
لدعم السمات ، يتم استخدام جوهرة pry-theme
. أستخدم تلوين بناء الجملة (وعندما أشعر بالملل ، أقوم بتشغيل PRY_BW=true pry
). بالنسبة للمجلدات التي تشغل Rails (التي تحتوي على مشاريع Rails ) ، يمكن أن تكون الألوان أكثر خيالية ، لكنني أكره Rails ، وبالتالي ما يحدث هناك ، لا يمكنني القول بالتأكيد.
unless ENV['PRY_BW'] Pry.color = true Pry.config.theme = "railscasts" Pry.config.prompt = PryRails::RAILS_PROMPT if defined?(PryRails::RAILS_PROMPT) Pry.config.prompt ||= Pry.prompt end
القصة
هذا مجرد اكتشاف. عندما تكون في وضع التصحيح ، أو إذا تم تنفيذ الأمر قبل ذلك مباشرة ، فقط اضغط على ⏎ وسيتم تكراره. إنه مفيد للغاية للتبديل إلى التعليمات البرمجية في مصحح الأخطاء (إذا كنت ، بالطبع ، تستخدم مصحح الأخطاء على الإطلاق ، ولم تقم بإصلاح جميع الأخطاء بمظهر ثابت ، ولا تقم مطلقًا بتشغيل مصحح الأخطاء مثلي ، على سبيل المثال).
Pry.config.history.should_save = true Pry::Commands.command /^$/, "repeat last command" do _pry_.run_command Pry.history.to_a.last end
الأوامر
المصحح. الدراجة ليست لي ، لقد اقترضت هذه السطور الخمسة فقط من زميلي في الفريق ، الذي يقضي حياته بأكملها في تصحيح الأخطاء ، لكنهم يقولون ، إنها تعمل.
Pry.commands.alias_command 'c', 'continue' rescue nil Pry.commands.alias_command 's', 'step' rescue nil Pry.commands.alias_command 'n', 'next' rescue nil Pry.commands.alias_command 'f', 'finish' rescue nil Pry.commands.alias_command 'l', 'whereami' rescue nil
الوحدة النمطية / فئة وصف التكوين
Pry.config.ls.separator = "\n"
يبدو أنه لا يوجد شيء للتعليق عليه.
استدعاء نظام المرافق
يدعم Pry
استدعاء أدوات النظام المساعدة (فقط أضف نقطة قبل اسم الأمر دون فراغ أو .ls
أو .ps axu
.ls
).
الإضافات
أدناه هو أبسط مثال لتكوين البرنامج المساعد. لا أحد يحب التكوينات المتضخمة ، فنحن نلميعها ونحملها لعقود من الزمن باستخدام آلات مختلفة. المقتطف أدناه هو مجرد مثال ( awesome
الإضافي awesome
). التعليقات في الكود تتحدث عن نفسها.
فرق مخصصة
لم أذكر pry
رائع جدا REPL؟ يمكننا حتى تحديد مجموعة من الأوامر الخاصة بنا لاستخدامها داخل pry
. يوضح المثال التالي كيفية إنشاء أمر sql
لتنفيذ SQL خالص من وحدة التحكم (شريطة أن يكون لدينا اتصال AR فعال) - مع الحد الأدنى لعدد ضربات المفاتيح.
default_command_set = Pry::CommandSet.new do command "sql", "Send sql over AR." do |query| if ENV['RAILS_ENV'] || defined?(Rails) pp ActiveRecord::Base.connection.select_all(query) else pp "No rails env defined" end end end Pry.config.commands.import default_command_set
Monkeypatches و Globals
نعم ، يمكننا تخصيص وتنفيذ أي رمز روبي مع monkeypatches الخاصة بنا ، والتي ستكون متاحة فقط في جلسات pry
. على سبيل المثال ، أجد أن هذا الرمز مناسب جدًا لاختبار الكود الذي يعمل بالصفائف والتجزئة.
class Array def self.sample(count = 10, &block) Array.new(count, &(block || :succ)) end end Hash.singleton_class.prepend(Module.new def sample(count = 10) (?a...count.times.reduce(?a) { |o| o.succ }). map(&:to_sym).zip(0...count).to_h end end)
ملاحظة: إذا كنت تعتقد أن المقتطف أعلاه قد تم تضخيمه بشكل مفرط بواسطة هذا الرقم Integer#succ
، فمن المحتمل أنك لم تتعامل مع التجزئة الطويلة بأكثر من 26 مفتاحًا :)
تعديل اللون
كل شيء أدناه هو لضبط الألوان باستخدام جوهرة coderay
. والنتيجة هي يستحق كل هذا العناء. الرموز حمراء والأرقام زرقاء وكل موسيقى الجاز.
CodeRay.scan("example", :ruby).term
في الختام
آمل أن يعطي هذا المنشور انطباعًا pry
ماهية pry
ولماذا أفضل من irb
. لم أركز بشكل خاص على عملية تصحيح الأخطاء ، وذلك أساسًا لأنني لا أقوم بتصحيح الأخطاء ، لكنني أكتب الرمز الصحيح من البداية. لكن آمل أن أتمكن من إثارة اهتمام أولئك الذين يرون هذا المزيج من الرسائل - pry
- لأول مرة - على الأقل محاولة. صدقني ، الأمر يستحق ذلك.
النسخ المتماثلة جيدة!