الفرق بين المراجعتين لصفحة: «Ruby/Binding»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 2: | سطر 2: | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Binding]] | [[تصنيف: Ruby Binding]] | ||
تُغلِّف كائنات الصنف Binding سياق التنفيذ (execution context) في مكان معين في الشيفرة البرمجية، وتحتفظ بذلك السياق لاستخدامه مستقبلًا. يُحتفَظ بالمتغيرات، والتوابع، وقيمة | تُغلِّف كائنات الصنف <code>Binding</code> سياق التنفيذ (execution context) في مكان معين في الشيفرة البرمجية، وتحتفظ بذلك السياق لاستخدامه مستقبلًا. يُحتفَظ بالمتغيرات، والتوابع، وقيمة <code>self</code>، وربما كتلة المكرر (iterator block) وكل ما يمكن الوصول إليه في هذا السياق. يمكن إنشاء كائنات الصنف <code>Binding</code> باستخدام التابع <code>Kernel.binding</code>، واستدعاؤها بوساطة التابع <code>Kernel.set_trace_func</code>. | ||
يمكن تمرير كائنات الربط (binding objects) هذه كوسيط ثانٍ للتابع Kernel.eval لإنشاء بيئة للتقييم (evaluation). | يمكن تمرير كائنات الربط (binding objects) هذه كوسيط ثانٍ للتابع <code>Kernel.eval</code> لإنشاء بيئة للتقييم (evaluation).<syntaxhighlight lang="ruby"> | ||
class Demo | class Demo | ||
def initialize(n) | def initialize(n) | ||
سطر 21: | سطر 21: | ||
eval("@secret", b2) #=> -3 | eval("@secret", b2) #=> -3 | ||
eval("@secret") #=> nil | eval("@secret") #=> nil | ||
مصادر | </syntaxhighlight> | ||
== التوابع العامة (Public Instance Methods) == | |||
===[[Ruby/Binding/eval | التابع <code>Binding.eval</code> ]]=== | |||
يقدر التابع <code>eval</code> تعابير لغة روبي الممررة إليه في السياق <code>binding</code>. في حال تمرير الوسيطين الاختياريين <code>filename</code> و <code>lineno</code>، فسيُستخدمان عند الإبلاغ عن وجود أخطاء في الصياغة (<code>syntax</code> <code>errors</code>). | |||
===[[Ruby/Binding/local_variables | <code>التابعBinding.local_variables</code> ]]=== | |||
يعيد التابع <code>local_variables</code> أسماء المتغيرات المحلية المعرفة في <code>Binding</code> على شكل رموز (<code>symbols</code>). | |||
هذا التابع هو النسخة المختصرة للشيفرة التالية: | |||
<code>binding</code>.[[Ruby/Binding/eval | <code>eval</code>]]("<code>local_variables</code>") | |||
===[[Ruby/Binding/local_variable_defined-3F | <code>التابعBinding.local_variable_defined?</code> في ربي]]=== | |||
يتحقق التابع[[Ruby/Binding/local_variable_defined-3F | <code>local_variable_defined?</code>]]? إن كان المتغير <code>symbol</code> المحلي موجودًا أم لا. | |||
هذا التابع هو النسخة المختصرة للشيفرة التالية: | |||
<code>binding</code>.[[Ruby/Binding/eval | <code>eval</code>]]("<code>defined?</code>?(#{<code>symbol</code>}) == '<code>local</code>-<code>variable</code>'") | |||
===[[Ruby/Binding/local_variable_get | <code>التابعBinding.local_variable_get</code> ]]=== | |||
يعيد التابع<code>local_variable_get</code> قيمة المتغير المحلي الممرَّر إليه. | |||
هذا التابع هو النسخة المختصرة للشيفرة التالية: | |||
<code>binding</code>.[[Ruby/Binding/eval | <code>eval</code>]]("#{<code>symbol</code>}") | |||
===[[Ruby/Binding/local_variable_set | <code>التابعBinding.local_variable_set</code> ]]=== | |||
يضبط التابع <code>local_variable_set</code> قيمة المتغير المحلي الممرر إليه إلى قيمة معينة. | |||
سلوك هذا التابع مشابه للشيفرة التالية في حال كان بالإمكان إهمال الكائن <code>obj</code> من شيفرة روبي: | |||
<code>binding</code>.[[Ruby/Binding/eval | <code>eval</code>]]("#{<code>symbol</code>} = #{<code>obj</code>}") | |||
===[[Ruby/Binding/receiver | <code>التابعBinding.receiver</code> ]]=== | |||
يعيد التابع <code>receiver</code> المستقبِل المرتبط (<code>bound</code> <code>receiver</code>) لكائن الربط[<code>a</code>][<code>b</code>] (<code>binding</code> <code>object</code>). | |||
== مصادر == | |||
صفحة الصنف Binding في توثيق روبي الرسمي. | صفحة الصنف Binding في توثيق روبي الرسمي. |
مراجعة 12:59، 12 سبتمبر 2018
تُغلِّف كائنات الصنف Binding
سياق التنفيذ (execution context) في مكان معين في الشيفرة البرمجية، وتحتفظ بذلك السياق لاستخدامه مستقبلًا. يُحتفَظ بالمتغيرات، والتوابع، وقيمة self
، وربما كتلة المكرر (iterator block) وكل ما يمكن الوصول إليه في هذا السياق. يمكن إنشاء كائنات الصنف Binding
باستخدام التابع Kernel.binding
، واستدعاؤها بوساطة التابع Kernel.set_trace_func
.
يمكن تمرير كائنات الربط (binding objects) هذه كوسيط ثانٍ للتابع Kernel.eval
لإنشاء بيئة للتقييم (evaluation).
class Demo
def initialize(n)
@secret = n
end
def get_binding
binding
end
end
k1 = Demo.new(99)
b1 = k1.get_binding
k2 = Demo.new(-3)
b2 = k2.get_binding
eval("@secret", b1) #=> 99
eval("@secret", b2) #=> -3
eval("@secret") #=> nil
التوابع العامة (Public Instance Methods)
التابع Binding.eval
يقدر التابع eval
تعابير لغة روبي الممررة إليه في السياق binding
. في حال تمرير الوسيطين الاختياريين filename
و lineno
، فسيُستخدمان عند الإبلاغ عن وجود أخطاء في الصياغة (syntax
errors
).
التابعBinding.local_variables
يعيد التابع local_variables
أسماء المتغيرات المحلية المعرفة في Binding
على شكل رموز (symbols
).
هذا التابع هو النسخة المختصرة للشيفرة التالية:
binding
. eval
("local_variables
")
التابعBinding.local_variable_defined?
في ربي
يتحقق التابع local_variable_defined?
? إن كان المتغير symbol
المحلي موجودًا أم لا.
هذا التابع هو النسخة المختصرة للشيفرة التالية:
binding
. eval
("defined?
?(#{symbol
}) == 'local
-variable
'")
التابعBinding.local_variable_get
يعيد التابعlocal_variable_get
قيمة المتغير المحلي الممرَّر إليه.
هذا التابع هو النسخة المختصرة للشيفرة التالية:
binding
. eval
("#{symbol
}")
التابعBinding.local_variable_set
يضبط التابع local_variable_set
قيمة المتغير المحلي الممرر إليه إلى قيمة معينة.
سلوك هذا التابع مشابه للشيفرة التالية في حال كان بالإمكان إهمال الكائن obj
من شيفرة روبي:
binding
. eval
("#{symbol
} = #{obj
}")
التابعBinding.receiver
يعيد التابع receiver
المستقبِل المرتبط (bound
receiver
) لكائن الربط[a
][b
] (binding
object
).
مصادر
صفحة الصنف Binding في توثيق روبي الرسمي.