ما هو بناء الجملة ( = > ) المستخدمة في تعيين كائن الخطأ إلى متغير من طريقة 'الإنقاذ'?
-
13-12-2019 - |
سؤال
ال rescue
والذي يمكن أن يعين متغيرا للإشارة إلى كائن الخطأ يحتوي على بناء الجملة هذا (=>
)
rescue => e
إذا rescue
هو واحد من استدعاء الأسلوب العام ، ما هو معنى =>
.هل يمكنني استخدام نفس بناء الجملة على استدعاء طريقة أخرى?
my_method arg1, arg2 => my_obj
المحلول
بينما raise
هو في الواقع طريقة, rescue
ليس كذلك.إنها كلمة رئيسية ومحددة على تحليل.ص: 10467.على هذا النحو ، فإن بناء الجملة لديك هو خاص ل rescue
(منذ => e
ليس أي نوع من الطريقة حجة) ، وغير صالحة للطرق نفسها (على الأقل ليس بنفس المعنى).كيف / أين rescue => e
يتم تعريف بناء الجملة نفسه في المحلل اللغوي لست متأكدا تماما.
نصائح أخرى
كما قد يقول بعض مدرب كرة القدم/الفيلسوف الملك ، هذا ما هو عليه.هنا روبي تحليل.y.ذات أهمية خاصة هي هذا الجزء:
opt_rescue : keyword_rescue exc_list exc_var then
compstmt
opt_rescue
...
| none
;
exc_list : arg_value
...
| mrhs
...
| none
;
exc_var : tASSOC lhs
...
| none
;
الشرح
exc_list
لا يسمح بشكل أساسي بأي شيء ، أو نوع استثناء ، أو سلسلة (متناثرة) من الاستثناءات مثل rescue ZeroDivisionError, LoadError
exc_var
يمكن أن يكون لا شيء أو => some_variable
opt_rescue
لذلك يمكن أن يكون rescue
في حد ذاته أو بالإضافة إلى أي أو كل من أعلاه.
انها فقط المدرجة هنا بناء جملة خاص لتعيين الاستثناءات.الاستخدام الآخر الوحيد ل =>
هو ل جمعية القيمة الرئيسية.
لاحظ أيضا أن arg_value
و mrhs
على الجانب الأيسر و lhs
على الجانب الأيمن ، وهو بقدر ما أستطيع أن أقول المكان الوحيد الذي يحدث فيه هذا.شخص تصحيح لي إذا كنت مخطئا هنا ، ولكن ليس هناك أي مهمة أخرى "إلى الوراء" في تحليل.y.
لا ، يتم استخدام بناء الجملة في الإنقاذ هناك فقط.إذا كنت تستخدم صاروخ هاش '= > ' في استدعاء وظيفة من هذا القبيل ، سيتم تفسيره على أنه تجزئة ، وإذا لم يتم تعريف أرغ 2 كمتغير سابقا ، سيكون خطأ.
def foo(a,b)
puts b.inspect
end
foo "bar", :baz => 5 #=> {:baz=>5}
foo "bar", baz => 5 #=> NameError: undefined local variable or method `baz'
baz = "flux"
foo "bar", baz => 5 #=> {"flux"=>5}