سؤال

أبحث عن تفسير لما يحدث في الجزء العلوي artoo.io الروبوتات.يوجد إعلان في أعلى هذا المثال باستخدام برنامج تشغيل لوحة المفاتيح:

require 'artoo'

connection :keyboard, adaptor: :keyboard
device :keyboard, driver: :keyboard, connection: :keyboard

يبدو أنه تم عرض بعض الصيغ المختصرة/البديلة، وأود الحصول على شرح لهذا الاختصار.أنا أفهم بناء جملة التجزئة البديل: :adapter => :keyboard.

ما الذي يحدث في هذين السطرين الأخيرين من التعليمات البرمجية أعلاه؟ما هو connection؟هل هو فئة في الداخل artoo التي يتم تهيئة؟لماذا لا يوجد new؟أين :keyboard يأتي من؟إذا كان هناك بناء جملة بديل يمثل العلاقات بشكل أكثر وضوحًا، فهل يمكنك إظهار ذلك أيضًا؟

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

المحلول

هذا سؤال عظيم.قد تكون نسخة مكررة ولكني لم أتمكن من العثور على واحدة وهذا هو الأمر الصعب بالنسبة للمبرمجين الأذكياء الجدد في روبي.

أولا بالنسبة لسؤالك:ما هو connection?

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

foo

في هذه الحالة، فهي طريقة لا تأخذ أي معلمات.أو يمكن أن يبدو مثل هذا:

foo 1, 2, 3

هذه طريقة ذات ثلاث معلمات.أو يمكن أن يبدو مثل هذا:

foo(1, 2, 3)

هذه هي نفس الطريقة، ولكن مع بناء جملة مختلف قليلاً (وهو مألوف أكثر لدى الأشخاص الذين لديهم تجارب في لغات محاكاة لغة C مثل c، وC++، وJava، وJavascript، وC#، وما إلى ذلك...)

لذلك عندما ترى المعلمات مدرجة بعد كلمة مجردة، مع عدم وجود عوامل تشغيل بينها، فهذه علامة أكيدة على أنها استدعاء الأسلوب.

الآن لتقسيم التعليمات البرمجية الخاصة بك بالكامل.

require 'artoo'

هذا من الناحية الفنية استدعاء الأسلوب.أنت تتصل بـ require الطريقة وتمرير معلمة واحدة من السلسلة الحرفية 'artoo'.كما قد تعرف، require يقوم بتحميل ملف روبي خارجي في الملف الحالي.

connection :keyboard, adaptor: :keyboard

هذه طريقة استدعاء مع البعض التجميل اللغوى:

أنت تعرف ذلك على الفور connection هو استدعاء الأسلوب لأنه يحتوي على معلمات بعده (أيلا يوجد عامل بين connection وما بعده).ولكن ما المعلمات؟

:keyboard:هو رمز, ، وهو ما يعادل روبي ل سلسلة المتدرب.

adaptor: :keyboard هو التجزئة.

لدى روبي صيغتي تجزئة أساسيتين:

{key => value}

أين key و value هي أي كائنات، أو:

{key: value}

أين key هو رمز حرفي و value هو أي كائن.أيضًا، للحفاظ على نظافة التعليمات البرمجية، عند تمرير التجزئة باسم آخر معلمة لطريقة ما، يمكنك تركها { و } لأنه لا لبس فيه.ينتهي الأمر بإعطائك استدعاء أسلوب نظيف "معلمة مسماة":

do_something_to my_person, kindness: 10, aggressiveness: 2

في الكود الخاص بك:

connection :keyboard, adaptor: :keyboard

لديك بناء جملة التجزئة البديل (مفاتيح الرموز) مع { و } متروك مهمل.السطر بأكمله يعادل 100٪:

connection(:keyboard, {:adaptor => :keyboard})

سطرك الأخير:

device :keyboard, driver: :keyboard, connection: :keyboard

إنه الشيء نفسه.أي ما يعادل:

device(:keyboard, {:driver => :keyboard, :connection => :keyboard})

يبدو أجمل (بمجرد أن تعتاد عليه).

نصائح أخرى

في المثال الخاص بك، connection و device هي الأساليب.ال adapter: :keyboard, driver: :keyboard و :connection: :keyboard البتات هي معلمات يتم تمريرها كتجزئة لتلك الأساليب.لا يتم تمرير المعلمات الأولى التي تم تمريرها إلى الاتصال () والجهاز () في عملية تجزئة.

يمكن إعادة كتابة نفس الكود على النحو التالي:

connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top