© John Mair (Banisterfiend) 2018
(الخالق)
© Kyrylo Silin (Kyrylosilin) 2018
(المشرف)
الخريجين:
الروابط:
PRY هي وحدة تحكم مطور وقت التشغيل وبديل IRB مع إمكانات التأمل القوية. يهدف براي إلى أن يكون أكثر من بديل IRB. إنها محاولة لجلب البرمجة التي تحركها REPLIST إلى لغة الياقوت.
edit Class#method
)cd
، ls
والأصدقاء) gem 'pry' , '~> 0.15.0'
gem install pry
PRY مرن إلى حد ما ويسمح تخصيص المستخدم المهم. من التافهة القراءة من أي كائن له طريقة readline
والكتابة إلى أي كائن له puts
. العديد من الجوانب الأخرى من PRY قابلة للتكوين ، مما يجعلها خيارًا جيدًا لتنفيذ القذائف المخصصة.
يأتي Pry مع قابلة للتنفيذ بحيث يمكن استدعاؤه في سطر الأوامر. فقط أدخل pry
للبدء. سيتم تحميل ملف pryrc
في $XDG_CONFIG_HOME/pry/
أو يتم تحميل الدليل الرئيسي للمستخدم إذا كان موجودًا. اكتب pry --help
في سطر الأوامر لمزيد من المعلومات.
يتم تنفيذ كل جزء من الوظائف تقريبًا في جلسة PRY كقيادة. الأوامر ليست طرقًا ويجب أن تبدأ في بداية الخط ، مع عدم وجود مساحة بيضاء. تدعم الأوامر بناء جملة مرنة وتسمح "للخيارات" بنفس طريقة عرض أوامر shell ، على سبيل المثال ، سيعرض أمر pry التالي قائمة بجميع أساليب المثيلات الخاصة (في النطاق) التي تبدأ بـ "PA"
pry ( YARD :: Parser :: SourceParser ) : 5 > ls - Mp -- grep ^ pa
YARD :: Parser :: SourceParser #methods: parse parser_class parser_type parser_type= parser_type_for_filename
يسمح لنا Pry بالظهور والخروج من نطاقات مختلفة (كائنات) باستخدام أمر cd
. هذا يمكّننا من استكشاف عرض وقت التشغيل لبرنامج أو مكتبة. لعرض المتغيرات والأساليب المتوفرة في نطاق معين ، نستخدم الأمر متعدد الاستخدامات.
سنبدأ هنا في المستوى الأعلى ، ثم نقر على فصل واحد ثم على متغير مثيل داخل تلك الفئة:
pry ( main ) > class Hello
pry ( main ) * @x = 20
pry ( main ) * end
=> 20
pry ( main ) > cd Hello
pry ( Hello ) : 1 > ls - i
instance variables : @x
pry ( Hello ) : 1 > cd @x
pry ( 20 ) : 2 > self + 10
=> 30
pry ( 20 ) : 2 > cd ..
pry ( Hello ) : 1 > cd ..
pry ( main ) > cd ..
الرقم بعد :
في موجه pry يشير إلى مستوى التعشيش. لعرض المزيد من المعلومات حول التعشيش ، استخدم أمر nesting
. على سبيل المثال
pry ( "friend" ) : 3 > nesting
Nesting status :
0 . main ( Pry top level )
1 . Hello
2 . 100
3 . "friend"
=> nil
يمكننا بعد ذلك القفز إلى أي من مستويات التعشيش السابقة باستخدام أمر jump-to
:
pry ( "friend" ) : 3 > jump - to 1
= > 100
pry ( Hello ) : 1 >
يمكن استدعاء PRY في منتصف برنامج الجري. يفتح جلسة PRY في النقطة التي يطلق عليها ويجعل جميع حالة البرنامج متاحة في تلك المرحلة. يمكن استدعاؤه على أي كائن باستخدام بناء my_object.pry
أو على الربط الحالي (أو أي ربط) باستخدام binding.pry
. ستبدأ جلسة PRY في نطاق الكائن (أو الربط). عندما تنتهي الجلسة ، يستمر البرنامج مع أي تعديلات قمت بها.
يمكن استخدام هذه الوظيفة لأشياء مثل: تصحيح الأخطاء ، وتنفيذ لوحات مفاتيح المطورين وتطبيق التصحيحات الساخنة.
شفرة:
# test.rb
require 'pry'
class A
def hello ( ) puts "hello world!" end
end
a = A . new
# start a REPL session
binding . pry
# program resumes here (after pry session)
puts "program resumes here."
جلسة PRY:
pry ( main ) > a . hello
hello world!
=> nil
pry ( main ) > def a . goodbye
pry ( main ) * puts "goodbye cruel world!"
pry ( main ) * end
=> :goodbye
pry ( main ) > a . goodbye
goodbye cruel world!
=> nil
pry ( main ) > exit
program resumes here .
خط من المدخلات الذي يبدأ بـ ". سيتم إرسالها إلى قذيفة القيادة. يمكّننا ذلك من التنقل في نظام الملفات ، وتوضيح المحررين ، وتشغيل Git و Rake مباشرة من داخل Pry.
علاوة على ذلك ، يمكننا استخدام أمر shell-mode
لدمج دليل العمل الحالي في موجه pry وجلب (محدود في هذه المرحلة ، آسف) إتمام اسم الملف. يمكننا أيضًا الاستيلاء على رمز الياقوت مباشرة في القشرة باستخدام بناء جملة الاستيفاء #{}
العادي.
في الرمز أدناه ، سنقوم بالتبديل إلى shell-mode
وتحرير ملف pryrc
. سنقوم بعد ذلك بتقديم محتوياته وإعادة تحميل الملف.
pry ( main ) > shell - mode
pry main : /home/john / ruby / projects / pry $ . cd ~
pry main : /home/john $ . emacsclient . pryrc
pry main : /home/john $ . cat . pryrc
def hello_world
puts "hello world!"
end
pry main : /home/john $ load ".pryrc"
=> true
pry main : /home/john $ hello_world
hello world!
يمكننا أيضا أن يدور في رمز الياقوت في الصدفة. في المثال أدناه ، نستخدم CARDER cat
على ملف عشوائي من الدليل الحالي وحساب عدد الخطوط الموجودة في هذا الملف باستخدام wc
:
pry main : /home/john $ . cat #{Dir['*.*'].sample} | wc -l
44
يمكنك تصفح رمز المصدر للموضة باستخدام أمر show-source
. يمكن أن تكون جميع طرق Ruby تقريبًا (وبعض طرق C ، مع GEM-DOC) عرض مصدرها. يتم إرسال رمز أطول من الصفحة من خلال جهاز النداء (مثل أقل) ، ويتم تمييز جميع التعليمات البرمجية بشكل صحيح (حتى رمز C).
يقبل الأمر show-source
بناء جملة ، بناء جملة Class#method
النموذجي وأيضًا ببساطة اسم الطريقة الموجودة في النطاق. يمكنك اختياريًا تمرير خيار -l
show-source
لتضمين أرقام الأسطر في الإخراج.
في المثال التالي ، سندخل فئة Pry
، وسرد أساليب المثيل التي تبدأ بـ "SE" وعرض الرمز المصدري لطريقة set_last_result
:
pry ( main ) > cd Pry
pry ( Pry ) : 1 > ls - M -- grep se
Pry #methods: raise_up raise_up! raise_up_common reset_eval_string select_prompt set_last_result
pry ( Pry ) : 1 > show - source set_last_result - l
From : /home/john / ruby / projects / pry / lib / pry / pry_instance . rb : 405 :
Owner : Pry
Visibility : public
Signature : set_last_result ( result , code = ?)
Number of lines : 6
405 : def set_last_result ( result , code = "" )
406 : @last_result_is_exception = false
407 : @output_ring << result
408 :
409 : self . last_result = result unless code =~ / A s * z /
410 : end
لاحظ أنه يمكننا أيضًا عرض طرق C (من Ruby Core) باستخدام البرنامج المساعد pry-doc
؛ نعرض أيضًا بناء الجملة البديلة show-source
:
pry ( main ) > show - source Array #select
From : array . c in Ruby Core ( C Method ) :
Number of lines : 15
static VALUE
rb_ary_select ( VALUE ary )
{
VALUE result ;
long i ;
RETURN_ENUMERATOR ( ary , 0 , 0 ) ;
result = rb_ary_new2 ( RARRAY_LEN ( ary ) ) ;
for ( i = 0 ; i < RARRAY_LEN ( ary ) ; i ++ ) {
if ( RTEST ( rb_yield ( RARRAY_PTR ( ary ) [ i ] ) ) ) {
rb_ary_push ( result , rb_ary_elt ( ary , i ) ) ;
}
}
return result ;
}
تتمثل إحدى حالة استخدام PRY في استكشاف برنامج في وقت التشغيل بواسطة cd
مضغوط داخل وخارج الكائنات وعرض الأساليب والاستدعاء. في سياق استكشاف ، قد يكون من المفيد قراءة الوثائق لطريقة محددة تصادفها. يدعم أمر show-source
بناء جملة - بناء جملة ri
العادي بالإضافة إلى قبول اسم أي طريقة موجودة حاليًا.
لا يعتمد نظام الوثائق PRY على rdoc
أو ri
تم إنشاؤه مسبقًا ، وبدلاً من ذلك يمسك بالتعليقات مباشرة فوق الطريقة عند الطلب. يؤدي هذا إلى استرجاع وثائق أسرع ويسمح لنظام PRY باسترداد الوثائق للطرق التي لن يتم التقاطها بواسطة rdoc
. لدى PRY أيضًا فهمًا أساسيًا لتنسيقات RDOC و YARD وسيحاول بناء الجملة الضوء على الوثائق بشكل مناسب.
ومع ذلك ، فإن وظيفة ri
جيدة جدًا ولها ميزة على نظام Pry من حيث أنها تتيح البحث عن الوثائق للفئات والأساليب. لذلك PRY لديه تكامل جيد مع ri
من خلال أمر ri
. بناء الجملة للأمر هو بالضبط كما سيكون في سطر الأوامر - لذلك ليس من الضروري اقتباس الأوتار.
في مثالنا ، سندخل فئة Gem
وعرض الوثائق لطريقة try_activate
:
pry ( main ) > cd Gem
pry ( Gem ) : 1 > show - source try_activate - d
From : /Users/john / rbenv / versions / 2.7 . 1 / lib / ruby / 2.7 . 0 / rubygems . rb : 194 :
Owner : #<Class:Gem>
Visibility : public
Signature : try_activate ( path )
Number of lines : 28
Try to activate a gem containing path . Returns true if
activation succeeded or wasn 't needed because it was already
activated. Returns false if it can' t find the path in a gem .
def self . try_activate ( path )
# finds the _latest_ version... regardless of loaded specs and their deps
# if another gem had a requirement that would mean we shouldn't
# activate the latest version, then either it would already be activated
# or if it was ambiguous (and thus unresolved) the code in our custom
# require will try to activate the more specific version.
spec = Gem :: Specification . find_by_path path
pry ( Gem ) : 1 >
يمكننا أيضًا استخدام ri
بالطريقة العادية:
pry ( main ) ri Array #each
----------------------------------------------------------- Array #each
array . each { | item | block } -> array
------------------------------------------------------------------------
Calls _block_ once for each element in _self_ , passing that element
as a parameter .
a = [ "a" , "b" , "c" ]
a . each { | x | print x , " -- " }
produces :
a -- b -- c --
يمكنك استخدام edit Class#method
أو edit my_method
(إذا كانت الطريقة في نطاقها) لفتح طريقة للتحرير مباشرة في المحرر المفضل لديك. لدى Pry معرفة ببعض المحررين المختلفين وسيحاول فتح الملف على السطر. يتم تعريف الطريقة.
يمكنك تعيين المحرر لاستخدامه من خلال تعيين إلى ملحق Pry.editor
. ستقوم Pry.editor
بالتخلف عن $EDITOR
أو فشل في استخدام nano
كنسخ احتياطي افتراضي. سيتم إعادة تحميل الملف الذي يتم تحريره تلقائيًا بعد الخروج من المحرر -يمكن قمع --no-reload
التحميل عن طريق تمرير خيار edit
في المثال أدناه ، سنقوم بتعيين المحرر الافتراضي الخاص بنا على "Emacsclient" وفتح طريقة Pry#repl
للتحرير:
pry ( main ) > Pry . editor = "emacsclient"
pry ( main ) > edit Pry #repl
العديد من الأوامر الأخرى متوفرة في PRY. لمشاهدة help
نوع القائمة الكاملة في المطالبة. يتم تزويد وصف قصير لكل أمر بالإرشادات الأساسية للاستخدام ؛ تحتوي بعض الأوامر على مساعدة أكثر شمولاً يمكن الوصول إليها من خلال كتابة command_name --help
. سيقول الأمر عادةً في وصفه إذا كان خيار --help
متاحًا.
يمكنك تشغيل وحدة تحكم PRY في بيئة تطبيقك باستخدام علم Pry -r
:
pry -r ./config/environment
أو ابدأ وحدة التحكم في Rails ( bin/rails console
) ثم اكتب pry
.
من الممكن أيضًا استخدام Pry كوحدة تحكم Rails عن طريق إضافة جوهرة Pry-Rails إلى Gemfile. يحل هذا محل وحدة التحكم الافتراضية بالبيئة ، بالإضافة إلى تحميل مساعدي وحدة التحكم في Rails وإضافة بعض الأوامر المفيدة الخاصة بـ Rails.
لاحظ أنه لم يتم الحفاظ على pry-rails
حاليًا.
تحقق أيضًا من Wiki لمزيد من المعلومات حول دمج Pry مع Rails.
تمييز بناء الجملة بشكل افتراضي في PRY. إذا كنت ترغب في تغيير الألوان ، تحقق من جوهرة PRY-SHEME.
يمكنك تبديل بناء الجملة الذي يبرز وإيقاف تشغيله في جلسة باستخدام أمر toggle-color
. بدلاً من ذلك ، يمكنك إيقاف تشغيله بشكل دائم عن طريق وضع الخط Pry.color = false
في ملف pryrc
الخاص بك.
في حال كان لديك مشكلة أو سؤال أو تقرير خطأ ، لا تتردد في:
يستخدم المشروع ترخيص معهد ماساتشوستس للتكنولوجيا. انظر الترخيص. md للحصول على التفاصيل.
Pry هو في المقام الأول عمل John Mair (Banisterfiend) ، للاطلاع على قائمة كاملة من المساهمين ، انظر الرسم البياني للمساهمين.