كيف يمكنني إدخال الأشياء في روبي؟
-
21-09-2019 - |
سؤال
على سبيل المثال ، في Python ، يمكنني أن أفعل أشياء مثل هذا إذا أردت الحصول على جميع السمات على كائن:
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
أو إذا كنت أرغب في عرض وثائق شيء ما ، يمكنني استخدام وظيفة المساعدة:
>>> help(str)
هل هناك أي طريقة للقيام بأشياء مماثلة في روبي؟
المحلول
بالتأكيد ، إنها أبسط من Python. اعتمادًا على المعلومات التي تبحث عنها ، جرب:
obj.methods
وإذا كنت تريد فقط الأساليب المحددة لـ OBJ (على عكس الحصول على الأساليب Object
أيضًا)
obj.methods - Object.methods
كما هو مثير للاهتمام هو القيام بأشياء مثل:
obj.methods.grep /to_/
للحصول على متغيرات المثيل ، قم بذلك:
obj.instance_variables
وللمتغيرات الفئة:
obj.class_variables
نصائح أخرى
إذا كنت تريد جميع الطرق التي يمكنك الاتصال بها على شيء من الاستخدام
>>> x.methods
إذا كنت تريد بعض معلومات المساعدة ، فاتصل بالمساعدة قبل فصلها
>>> help x.class
المساعدة هي غلاف ل RI داخل IRB.
إذا كان لديك كائن ، وتريد أن تعرف ما هي الطرق التي تستجيب لها ، فيمكنك التشغيل obj.methods
(وجميع الحيل التي ذكرها thenduks في هذه النتيجة.)
إذا كان لديك فصل ، يمكنك الجري klass.methods
لمعرفة أساليب الفصل المتاحة ، أو يمكنك تشغيلها klass.instance_methods
لمعرفة الطرق المتوفرة في مثيلات تلك الفئة. klass.instance_methods(false)
مفيد ، لأنه يخبرك ما هي الأساليب التي تم تحديدها من قبل الفصل وليس موروثة.
هناك الآن طريقة للحصول على نص مساعدة لطريقة داخل روبي بالطريقة التي يفعلها Python.
هناك وحدة تسمى ObjectSpace
والتي يتم تضمينها في كل كائن تم إنشاؤه في روبي. إنه يحمل جميع الطرق التي تساعدك على إدخال السياق الحالي للعملية. في IRB تبدأ في Object:Main
السياق وهو سياق المستوى الأعلى لجلسة IRB الحالية. ثم يمكنك أن تفعل شيئًا مثل time = Time.now
ثم افعل irb time
الذي سيأخذك إلى سياق ذلك الكائن ويمكنك فحصه من الداخل دون الاتصال ObjectSpace
طرق على هذا الكائن.