محاولة العثور على ملف / خط ل :. (eval): 289: تحذير: لا تضع الفضاء قبل قوسان الحجة

StackOverflow https://stackoverflow.com/questions/1911840

سؤال

لذلك، أحصل على هذا التحذير عندما أقوم بتشغيل اختباراتي في 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 في رسالة التحذير هو رقم الخط داخل evalD سلسلةفي وبعبارة أخرى: في مكان ما في طلبك هناك سلسلة يجري evalد، وهو على الاكثر 289 خطوط طويلة! (في الواقع، من المرجح أن هذا غير موجود ليس في طلبك ولكن في القضبان بدلا من القضبان. اعتاد جهاز توجيه القضبان أن يكون مجرما سيئا بشكل خاص، لا أعرف ما إذا كان هذا هو الحال.)

نصائح أخرى

يبدو لي أن هناك قاعدة تمنع مساحة بين اسم الوظيفة والأقواس المرفوعة بحجج الوظيفة.

في العديد من اللغات، سيعتبر هذا اختلاف أسلالي مسموح به.

هل eval المذكورة في رسالة التحذير، وشكا "الوظيفة"؟

هل الرقم 289 يعني أي شيء كرقم سطر؟

هل يمكن أن تبحث في ملفات المصدر الخاصة بك بتقويف سبق بواسطة مساحة؟

بالمناسبة، تقول الرسالة warning. وبعد ماذا يحدث إذا تجاهلت ذلك؟

إذا حدث ذلك بين اختبارات الوحدة، فقد يكون في طريقة الإعداد أو الدموع. حاول البحث عن eval أو حاول تقليل الرمز الذي تقوم بتشغيله حتى يذهب الخطأ. ثم ستعرف أين تبدو (الرمز الذي قمت بإزالته للتو).

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