محاولة العثور على ملف / خط ل :. (eval): 289: تحذير: لا تضع الفضاء قبل قوسان الحجة
-
19-09-2019 - |
سؤال
لذلك، أحصل على هذا التحذير عندما أقوم بتشغيل اختباراتي في Ruby / Ror
. (eval): 289: تحذير: لا تضع الفضاء قبل قوسان الحجة
لقد راجعت كل مكان (لكن overoiusly لا) ولا يمكنني العثور على أصل هذا الخطأ.
الخطأ أعلاه فقط ينبثق بين اختبارات الوحدة ...
هل يمكن لشخص ما يسببني في كيفية العثور على موقع هذا الخطأ؟
المحلول
يتم احتواء الملف ورقم السطر في Backtrace. ومع ذلك، في حالتك، فإن التحذير داخل سلسلة يجري eval
إد في وقت التشغيل. مما يعني لا يوجد ملف. وبعد (في الواقع، eval
طريقة هل اتخاذ الوسائط الاختيارية لاسم الملف ورقم السطر الذي يجب أن يتم عرضه في BackTrace، ولكن في هذه الحالة، كل من كتب التعليمات البرمجية المعنية، نسيت للأسف اجتياز هذه الحجج.)
أخشى أن يكون لديك خيار آخر من فحص كل مكالمة يدويا eval
في الكود الخاص بك بالكامل، وهذا يشمل القضبان، إطار الاختبار الخاص بك، تطبيقك بالكامل، اختباراتك، الإضافات، مساعدتك، مكتبة روبي القياسية، ...
بالطبع، يجب أن تدرك أن المشكلة قد لا تكون واضحة كما في
eval 'foo (bar, baz)'
يمكن أن يكون أيضا شيء مثل
def foo(*args)
puts args.join
end
bar = 'Hello'
baz = 'World'
foostr = 'foo' # in one file
barstr = 'bar' # in another file in a different directory
bazstr = 'baz' # in another file in a different directory
argstr = "(#{barstr}, #{bazstr})" # in yet another file
$, = ' ' # in some third-party plugin
str = [foostr, argstr].join # in a fourth file
eval str # somewhere else entirely
eval str, binding, __FILE__, __LINE__ # this is how it *should* be done
لاحظ الفرق بين رسالتين التحذير: أول واحد يقرأ تماما مثل الشخص الذي نشرته، ولكن ثانيا واحد لديه اسم الملف بدلا من (eval)
ورقم الخط داخل الملف بدلا من رقم السطر داخل سلسلة Eval.
بالمناسبة: رقم الخط 289
في رسالة التحذير هو رقم الخط داخل eval
D سلسلةفي وبعبارة أخرى: في مكان ما في طلبك هناك سلسلة يجري eval
د، وهو على الاكثر 289 خطوط طويلة! (في الواقع، من المرجح أن هذا غير موجود ليس في طلبك ولكن في القضبان بدلا من القضبان. اعتاد جهاز توجيه القضبان أن يكون مجرما سيئا بشكل خاص، لا أعرف ما إذا كان هذا هو الحال.)
نصائح أخرى
يبدو لي أن هناك قاعدة تمنع مساحة بين اسم الوظيفة والأقواس المرفوعة بحجج الوظيفة.
في العديد من اللغات، سيعتبر هذا اختلاف أسلالي مسموح به.
هل eval
المذكورة في رسالة التحذير، وشكا "الوظيفة"؟
هل الرقم 289 يعني أي شيء كرقم سطر؟
هل يمكن أن تبحث في ملفات المصدر الخاصة بك بتقويف سبق بواسطة مساحة؟
بالمناسبة، تقول الرسالة warning
. وبعد ماذا يحدث إذا تجاهلت ذلك؟
إذا حدث ذلك بين اختبارات الوحدة، فقد يكون في طريقة الإعداد أو الدموع. حاول البحث عن eval
أو حاول تقليل الرمز الذي تقوم بتشغيله حتى يذهب الخطأ. ثم ستعرف أين تبدو (الرمز الذي قمت بإزالته للتو).