الفرق بين المراجعتين لصفحة: «Ruby/Module/const missing»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>const_missing</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude> تصنيف: Ruby ...' |
لا ملخص تعديل |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Module]] | [[تصنيف: Ruby Module]] | ||
يُستدعى التابع <code>const_missing</code> عند محاولة استخدام ثابت غير معرف في الوحدة. | يُستدعى التابع <code>const_missing</code> عند محاولة استخدام ثابت غير معرف في الوحدة. ويُمرّر إليه الوسيط <code>sym</code> (انظر فقرة البنية العامة) الذي يمثل الثابتة غير المعرفة، ويعيد قيمة ليتم استخدامها بدل ذلك الثابت. كما يوضح المثال التالي:<syntaxhighlight lang="ruby"> | ||
def Foo.const_missing(name) | |||
name # return the constant name as Symbol | |||
end | |||
Foo::UNDEFINED_CONST #=> :UNDEFINED_CONST: symbol returned | |||
</syntaxhighlight> | |||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">const_missing(sym) → obj</syntaxhighlight> | <syntaxhighlight lang="ruby">const_missing(sym) → obj</syntaxhighlight> | ||
سطر 11: | سطر 16: | ||
===<code>sym</code>=== | ===<code>sym</code>=== | ||
رمز يمثل الثابتة. | |||
==القيمة المُعادة== | ==القيمة المُعادة== | ||
يُستدعى التابع <code>const_missing</code> قيمة ليتم استخدامها بدل الثابت. | |||
==أمثلة== | ==أمثلة== | ||
في المثال الموالي، عند محاولة الدخول إلى ثابت غير معرف، سيحاول التابع <code>const_missing</code> تحميل ملف اسمه هو اسم الثابت، لكن بحروف صغيرة، (مثلًا سيبحث عن الثابتة <code>Fred</code> في الملف <code>fred.rb</code>). إذا وجده، فسيعيد الصنف المحمل. حيث يقوم بتقديم (implements ) ميزة التحميل الذاتي (autoload) كما يفعل التابعان <code>[[Ruby/Kernel/autoload|Kernel#autoload]]</code> و <code>[[Ruby/Module/autoload|autoload]]</code>.<syntaxhighlight lang="ruby"> | |||
<syntaxhighlight lang="ruby">def | def Object.const_missing(name) | ||
name # return | @looked_for ||= {} | ||
str_name = name.to_s | |||
raise "Class not found: #{name}" if @looked_for[str_name] | |||
@looked_for[str_name] = 1 | |||
file = str_name.downcase | |||
require file | |||
klass = const_get(name) | |||
return klass if klass | |||
raise "Class not found: #{name}" | |||
end | end | ||
</syntaxhighlight> | |||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/Module/const_get|const_get]]</code>: يتحقق من وجود ثابت بالاسم المحدد في الوحدة | * التابع <code>[[Ruby/Module/const_get|const_get]]</code>: يتحقق من وجود ثابت بالاسم المحدد في الوحدة . | ||
* التابع <code>[[Ruby/Module/const_set|const_set]]</code>: يضبط قيمة الثابت المعطى عند الكائن المحدد ، | * التابع <code>[[Ruby/Module/const_set|const_set]]</code>: يضبط قيمة الثابت المعطى عند الكائن المحدد ، | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Module.html#method-i-const_missing قسم التابع const_missing في الصنف Module في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/Module.html#method-i-const_missing قسم التابع const_missing في الصنف Module في توثيق روبي الرسمي.] |
مراجعة 23:31، 26 أكتوبر 2018
يُستدعى التابع const_missing
عند محاولة استخدام ثابت غير معرف في الوحدة. ويُمرّر إليه الوسيط sym
(انظر فقرة البنية العامة) الذي يمثل الثابتة غير المعرفة، ويعيد قيمة ليتم استخدامها بدل ذلك الثابت. كما يوضح المثال التالي:
def Foo.const_missing(name)
name # return the constant name as Symbol
end
Foo::UNDEFINED_CONST #=> :UNDEFINED_CONST: symbol returned
البنية العامة
const_missing(sym) → obj
المعاملات
sym
رمز يمثل الثابتة.
القيمة المُعادة
يُستدعى التابع const_missing
قيمة ليتم استخدامها بدل الثابت.
أمثلة
في المثال الموالي، عند محاولة الدخول إلى ثابت غير معرف، سيحاول التابع const_missing
تحميل ملف اسمه هو اسم الثابت، لكن بحروف صغيرة، (مثلًا سيبحث عن الثابتة Fred
في الملف fred.rb
). إذا وجده، فسيعيد الصنف المحمل. حيث يقوم بتقديم (implements ) ميزة التحميل الذاتي (autoload) كما يفعل التابعان Kernel#autoload
و autoload
.
def Object.const_missing(name)
@looked_for ||= {}
str_name = name.to_s
raise "Class not found: #{name}" if @looked_for[str_name]
@looked_for[str_name] = 1
file = str_name.downcase
require file
klass = const_get(name)
return klass if klass
raise "Class not found: #{name}"
end
انظر أيضا
- التابع
const_get
: يتحقق من وجود ثابت بالاسم المحدد في الوحدة . - التابع
const_set
: يضبط قيمة الثابت المعطى عند الكائن المحدد ،