سؤال

وأتساءل لماذا روبي إعطاء and، or الأسبقية أقل من &&، ||، وتعيين مشغل؟ هل هناك أي سبب؟

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

المحلول

وتخميني هو هذا هو المباشر المرحل من بيرل. أضيفت or المشغلين وand في وقت لاحق في بيرل 5 لوكان المطلوب أقل من الأولوية حالات محددة.

وعلى سبيل المثال، في بيرل، وهنا نود أن || كان أقل من الأولوية، حتى نتمكن من إرسال:

try to perform big long hairy complicated action     || die ;

ومما لا شك فيه أن || ليست في طريقها لتلتهم جزءا من العمل. قدم بيرل 5 or، نسخة جديدة من || أن له الأسبقية منخفضة، وبالضبط هذا الغرض.

ومثال على ذلك في روبي حيث يمكن استخدام or ولكن ليس ||:

value = possibly_false or raise "foo"

إذا كنت تستخدم ||، فإنه سيكون خطأ في بناء الجملة.

نصائح أخرى

والفرق هو الأسبقية. ||، && لها أسبقية أعلى من =، ولكن and، or لديهم أقل. وذلك في حين يمكنك القيام به:

a = nil || 0

ويمكنك ان تقوم بذلك:

a = (nil or 0)

للحصول على نفس التأثير. إذا كنت تفعل:

a = nil or 0

ونتيجة التعبير سيظل 0، ولكن قيمة صفرا.

ولديهم الأسبقية منخفضة جدا بحيث المعاملات لا يجب أن تكون ملفوفة بين قوسين، كما هو الحال مع && و|| في بعض الأحيان.

وتكون قادرة على السيطرة على أسبقية مشغلي الخاص بك مفيدة في بعض الأحيان، خاصة إذا كنت تشعر بالقلق مع قراءة - قوسين إضافية في تصريحات مشروطة يمكن أن يحجب أحيانا المنطق الفعلي

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

وأعتقد أن الفكرة هي على وجه التحديد للحصول عليها تحت عوامل التعيين، حتى تتمكن من كتابة اختبارات المنطق مع المهام ولكن من دون أقواس.

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