التابع eval‎ الخاص بالصنف Kernel في روبي

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

يقيم (Evaluates) التابع تعبيرات روبي الموجودة في سلاسل نصية. إذا أعطي الوسيط binding، والذي يجب أن يكون من النوع Binding، فسيُجرى التقييم في السياق الخاص بها. في حال تمرير الوسيطين الاختياريين filename و lineno، فسيُستخدمان عند الإبلاغ عن أخطاء في الصياغة.

البنية العامة

eval(string [, binding [, filename [,lineno]]])   obj

المعاملات

string‎

binding‎

filename‎

lineno‎

القيمة المُعادة

أمثلة

مثال على استخدام التابع eval‎:

def get_binding(str)
  return binding
end
str = "hello"
eval "str + ' Fred'"                      #=> "hello Fred"
eval "str + ' Fred'", get_binding("bye")  #=> "bye Fred"

انظر أيضا

  • التابع chop: يكافئ التابع التعبير ($_.dup).chop! ، باستثناء أنّ nil لا تُعاد أبدًا. انظر صفحة String#chop!. متوفر فقط عند تحديد خيار سطر الأوامر -p/-n.
  • التابع exec: يستبدل التابع العملية الحالية عن طريق تشغيل الأمر الخارجي المعطى، والذي يمكن أن يأخذ أحد الأشكال التالية:

exec(commandline) سطر أوامر نصي shell exec(cmdname, arg1, ...) والذي يُمرّر إلى الصدفة (shell) القياسية، اسم أمر ووسيط واحد أو أكثر (بدون صدفة) اسم أمر و exec([cmdname, argv0], arg1, ...) و argv أو وسائط أكثر (بدون shell) في الشكل الأول ، تؤخذ السلسلة النصية باعتبارها سطر أوامر والذي تثوم الصدفة بتسبطُيه (expansion ) قبل أن يتم تنفيذه. الصدفة القياسية تعني دائمًا "/bin/sh" على الأنظمة المشابهة ليونكس، مثل ENV["RUBYSHELL"] (أو ENV["COMSPEC"] على منصات Windows NT ) ، وما شابه. إذا اتبعت السلسلة النصية من الشكل الأول (exec("command")) هذه القواعد البسيطة: لا أحرف مميزة (meta characters)، ولا كلمات مخصصة للصدفة أو مدمجة (built-in) ستستدعي روبي الأمر مباشرة دون صدفة يمكنك إلزام استدعاء الصدفة بإضافة "؛" إلى السلسلة النصية (لأن "؛" حرف مميز). لاحظ أن هذا السلوك يمكن ملاحظته في كون معرف العملية pid الذي تم الحصول عليه (القيمة المعادة من spawn () و IO#pid لـ IO.popen) هو معرف العملية pid للأمر المستدعى، وليس الصدفة . في الشكل الثاني (exec("command1", "arg1", ...)) ، يتم اعتبار الأول كاسم للأمر، أما البقية فتُمرّر كوسائط للأمر دون أن تبسطها الصدفة. في الشكل الثالث (exec(["command", "argv0"], "arg1", ...)) ، يُبدأ بمصفوفة ثنائية في بداية الأمر، العنصر الأول هو الأمر الذي سيتم تنفيذه، أما الثاني فيُستخدم باعتباره قيمة argv[0]، والتي قد تظهر في قوائم العملية (process listings). من أجل تنفيذ الأمر، ستُستخدم إحدى استدعاءات النظام exec(2)، لذلك فإنّ الأمر الجاري قد يرث بعض خصائص بيئة البرنامج الأصلي (بما في ذلك واصفات الملفات المفتوحة). يمكن تعديل هذا السلوك عبر الوسيطين env و options. انظر ::spawn لمزيد من التفاصيل. في حال فشل تنفيذ الأمر (عادةً عند عدم التمكن من إيجاد Errno::ENOENT) يتم إطلاق استثناء SystemCallError. بعدل التابع خصائص العملية وفقا لقيمة الوسيط options قبل استدعاء النظام exec(2). راجع ::spawn لمزيد من التفاصيل حول options المعطى. قد يُحتفظ بالخصائص المعدلة عند فشل استدعاء النظام exec(2). على سبيل المثال، حدود الموارد الثابتة (hard resource limits) غير قابلة للاستعادة. إذا لم يناسلبك هذا، فضع في اعتبارك إنشاء عملية فرعية (child process) باستخدام :: spawn أو #system.

مصادر