|
|
سطر 30: |
سطر 30: |
| * التابع <code>[[Ruby/Kernel/chop|chop]]</code>: يكافئ التابع التعبير <code>($_.dup).chop!</code> ، باستثناء أنّ <code>nil</code> لا تُعاد أبدًا. انظر صفحة <code>String#chop!</code>. متوفر فقط عند تحديد خيار سطر الأوامر -p/-n. | | * التابع <code>[[Ruby/Kernel/chop|chop]]</code>: يكافئ التابع التعبير <code>($_.dup).chop!</code> ، باستثناء أنّ <code>nil</code> لا تُعاد أبدًا. انظر صفحة <code>String#chop!</code>. متوفر فقط عند تحديد خيار سطر الأوامر -p/-n. |
| * التابع <code>[[Ruby/Kernel/exec|exec]]</code>: يستبدل التابع العملية الحالية عن طريق تشغيل الأمر الخارجي المعطى، والذي يمكن أن يأخذ أحد الأشكال التالية: | | * التابع <code>[[Ruby/Kernel/exec|exec]]</code>: يستبدل التابع العملية الحالية عن طريق تشغيل الأمر الخارجي المعطى، والذي يمكن أن يأخذ أحد الأشكال التالية: |
| <code>exec(commandline)</code> سطر أوامر نصي shell <code>exec(cmdname, arg1, ...)</code> والذي يُمرّر إلى الصدفة (shell) القياسية، اسم أمر ووسيط واحد أو أكثر (بدون صدفة) اسم أمر و <code>exec([cmdname, argv0], arg1, ...)</code> و <code>argv</code> أو وسائط أكثر (بدون shell)
| |
| في الشكل الأول ، تؤخذ السلسلة النصية باعتبارها سطر أوامر والذي تثوم الصدفة بتسبطُيه (expansion ) قبل أن يتم تنفيذه.
| |
| الصدفة القياسية تعني دائمًا <code>"/bin/sh"</code> على الأنظمة المشابهة ليونكس، مثل <code>ENV["RUBYSHELL"]</code> (أو <code>ENV["COMSPEC"]</code> على منصات Windows NT ) ، وما شابه.
| |
| إذا اتبعت السلسلة النصية من الشكل الأول (<code>exec("command")</code>) هذه القواعد البسيطة:
| |
| لا أحرف مميزة (meta characters)، ولا كلمات مخصصة للصدفة أو مدمجة (built-in) ستستدعي روبي الأمر مباشرة دون صدفة
| |
| يمكنك إلزام استدعاء الصدفة بإضافة "؛" إلى السلسلة النصية (لأن "؛" حرف مميز).
| |
| لاحظ أن هذا السلوك يمكن ملاحظته في كون معرف العملية pid الذي تم الحصول عليه (القيمة المعادة من spawn () و <code>IO#pid</code> لـ <code>IO.popen</code>) هو معرف العملية pid للأمر المستدعى، وليس الصدفة .
| |
| في الشكل الثاني (<code>exec("command1", "arg1",
| |
| ...)</code>) ، يتم اعتبار الأول كاسم للأمر، أما البقية فتُمرّر كوسائط للأمر دون أن تبسطها الصدفة.
| |
| في الشكل الثالث (<code>exec(["command", "argv0"],
| |
| "arg1", ...)</code>) ، يُبدأ بمصفوفة ثنائية في بداية الأمر، العنصر الأول هو الأمر الذي سيتم تنفيذه، أما الثاني فيُستخدم باعتباره قيمة <code>argv[0]</code>، والتي قد تظهر في قوائم العملية (process listings).
| |
| من أجل تنفيذ الأمر، ستُستخدم إحدى استدعاءات النظام <code>exec(2)</code>، لذلك فإنّ الأمر الجاري قد يرث بعض خصائص بيئة البرنامج الأصلي (بما في ذلك واصفات الملفات المفتوحة).
| |
| يمكن تعديل هذا السلوك عبر الوسيطين <code>env</code> و <code>options</code>. انظر ::spawn لمزيد من التفاصيل.
| |
| في حال فشل تنفيذ الأمر (عادةً عند عدم التمكن من إيجاد <code>Errno::ENOENT</code>) يتم إطلاق استثناء <code>SystemCallError</code>.
| |
| بعدل التابع خصائص العملية وفقا لقيمة الوسيط <code>options</code> قبل استدعاء النظام <code>exec(2)</code>. راجع ::spawn لمزيد من التفاصيل حول <code>options</code> المعطى.
| |
| قد يُحتفظ بالخصائص المعدلة عند فشل استدعاء النظام <code>exec(2)</code>.
| |
| على سبيل المثال، حدود الموارد الثابتة (hard resource limits) غير قابلة للاستعادة.
| |
| إذا لم يناسلبك هذا، فضع في اعتبارك إنشاء عملية فرعية (child process) باستخدام :: spawn أو <code>#system</code>.
| |
|
| |
|
| ==مصادر== | | ==مصادر== |
| *[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-eval قسم التابع eval في الصنف Kernel في توثيق روبي الرسمي.] | | *[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-eval قسم التابع 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
: يستبدل التابع العملية الحالية عن طريق تشغيل الأمر الخارجي المعطى، والذي يمكن أن يأخذ أحد الأشكال التالية:
مصادر