الفرق بين المراجعتين ل"Ruby/BasicObject/instance eval"
جميل-بيلوني (نقاش | مساهمات) ط |
|||
(مراجعة متوسطة واحدة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
− | <noinclude>{{DISPLAYTITLE: التابع <code> instance_eval</code>في الصنف <code>BasicObject</code> في روبي}}</noinclude> | + | <noinclude>{{DISPLAYTITLE: التابع <code>instance_eval</code> في الصنف <code>BasicObject</code> في روبي}}</noinclude> |
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
− | [[تصنيف: Ruby | + | [[تصنيف: Ruby BasicObject]] |
− | يقدِّر (Evaluates) التابع <code>instance_eval</code> ناتج تنفيذ شيفرة مصدرية للغة روبي معطاة كسلسلة نصية أو ناتج كتلة برمجية (block) مُمرَّرة ضمن سياق كائن مُستقبِل ( | + | يقدِّر (Evaluates) التابع <code>instance_eval</code> ناتج تنفيذ شيفرة مصدرية للغة روبي معطاة كسلسلة نصية أو ناتج كتلة برمجية (block) مُمرَّرة ضمن سياق كائن مُستقبِل (obj). لتعيين السياق، يُضبَط المتغير <code>self</code> إلى <code>obj</code> أثناء تنفيذ الشيفرة، مما يعطي الشيفرة إمكانية الوصول لمتغيرات النسخة <code>obj</code> والتوابع الخاصة. |
عندما يُمرَّر إلى التابع <code>instance_eval</code> كتلة برمجية، يُمرَّر <code>obj</code> أيضاً كوسيط وحيد للكتلة. | عندما يُمرَّر إلى التابع <code>instance_eval</code> كتلة برمجية، يُمرَّر <code>obj</code> أيضاً كوسيط وحيد للكتلة. | ||
سطر 41: | سطر 41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==انظر أيضًا== | ==انظر أيضًا== | ||
− | * التابع [[Ruby/BasicObject/instance_exec | <code>instance_exec</code>]]: ينفِّذ الكتلة البرمجية المُمرَّرة ضمن سياق الكائن المستقبل ( | + | * التابع<nowiki/>[[Ruby/BasicObject/instance_exec | <code>instance_exec</code>]]: ينفِّذ الكتلة البرمجية المُمرَّرة ضمن سياق الكائن المستقبل (obj). |
* التابع [[Ruby/BasicObject/send|<code>__send__</code>]]: يستدعي تابعًا محددًا مع تمرير وسائط إليه. | * التابع [[Ruby/BasicObject/send|<code>__send__</code>]]: يستدعي تابعًا محددًا مع تمرير وسائط إليه. | ||
==مصادر== | ==مصادر== | ||
* [http://ruby-doc.org/core-2.5.1/BasicObject.html#method-i-instance_eval قسم التابع instance_eval في الصنف BasicObject في توثيق روبي الرسمي.] | * [http://ruby-doc.org/core-2.5.1/BasicObject.html#method-i-instance_eval قسم التابع instance_eval في الصنف BasicObject في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 08:02، 4 أكتوبر 2018
يقدِّر (Evaluates) التابع instance_eval
ناتج تنفيذ شيفرة مصدرية للغة روبي معطاة كسلسلة نصية أو ناتج كتلة برمجية (block) مُمرَّرة ضمن سياق كائن مُستقبِل (obj). لتعيين السياق، يُضبَط المتغير self
إلى obj
أثناء تنفيذ الشيفرة، مما يعطي الشيفرة إمكانية الوصول لمتغيرات النسخة obj
والتوابع الخاصة.
عندما يُمرَّر إلى التابع instance_eval
كتلة برمجية، يُمرَّر obj
أيضاً كوسيط وحيد للكتلة.
البنية العامة
instance_eval(string [, filename [, lineno]] ) → obj
instance_eval {|obj| block } → obj
عندما يُمرَّر إلى التابع instance_eval
سلسلة نصية، يوفر المعاملان filename
و lineno
الاختياريان اسم الملف ورقم سطر البداية اللذان سيُستخدمان عند الإبلاغ عن وجود أخطاء في التصريف (compilation errors).
المعاملات
string
سلسلة نصية تحوي الشيفرة المراد تقدير ناتج تنفيذها.
filename
سلسلة نصية تمثل اسم الملف الذي سيستعمل عند الإبلاغ عن حصول أخطاء في التصريف (compilation errors).
lineno
سلسلة نصية تمثل رقم سطر البداية الذي سيستعمل عند الإبلاغ عن حصول أخطاء في التصريف (compilation errors).
القيم المعادة
يعاد كائن يحوي الناتج التقديري للشيفرة المعطاة في المعامل string
أو الكتلة block
.
أمثلة
مثال على استخدام التابع instance_eval
:
class KlassWithSecret
def initialize
@secret = 99
end
private
def the_secret
"Ssssh! The secret is #{@secret}."
end
end
k = KlassWithSecret.new
k.instance_eval { @secret } #=> 99
k.instance_eval { the_secret } #=> "Ssssh! The secret is 99."
k.instance_eval {|obj| obj == self } #=> true
انظر أيضًا
- التابع
instance_exec
: ينفِّذ الكتلة البرمجية المُمرَّرة ضمن سياق الكائن المستقبل (obj). - التابع
__send__
: يستدعي تابعًا محددًا مع تمرير وسائط إليه.