الفرق بين المراجعتين لصفحة: «Ruby/Module/const defined-3F»

من موسوعة حسوب
< Ruby‏ | Module
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>‎const_defined?‎‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude> تصنيف: Rub...'
 
ط مراجعة وتدقيق.
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>‎const_defined?‎‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: التابع <code>‎Module.const_defined?‎‎</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Module]]
[[تصنيف: Ruby Module Class]]
يتحقق التابع <code>const_defined?</code> مما إذا كانت للوحدة الذي استُدعي معه أو أحد أسلافها (ancestors) ثابت بالاسم المعطى:
يتحقق التابع <code>const_defined?</code> مما إذا كانت الوحدة التي استُدعي معها أو أحد أسلافها (ancestors) تحوي الثابت المعطى.<syntaxhighlight lang="ruby">
Float.const_defined?(:EPSILON)      #=> true, found in Float itself
Float.const_defined?("String")      #=> true, found in Object (ancestor)
BasicObject.const_defined?(:Hash)  #=> false
</syntaxhighlight>إذا كانت الوحدة من النوع <code>[[Ruby/Module|Module]]</code>، فسيتم إضافة إلى ذلك فحص <code>[[Ruby/Object|Object]]</code> وكذلك أسلافه.<syntaxhighlight lang="ruby">
Math.const_defined?(:String)  #=> true, found in Object


إذا كانت الوحدة من النوع <code>Module</code> ، فسيتم فحص <code>Object</code> وكذلك أسلافه:
</syntaxhighlight>في كل الأصناف أو الوحدات المفحوصة، إذا لم يكن الثابت موجودًا وكان [[Ruby/Module/autoload|التحميل التلقائي]] (autoload) مفعلًا له، فسيتم إعادة القيمة <code>true</code> مباشرةً دون [[Ruby/Module/autoload|تحميل تلقائي]]:<syntaxhighlight lang="ruby">
module Admin
  autoload :User, 'admin/user'
end
Admin.const_defined?(:User)  #=> true
</syntaxhighlight>إذا لم يتم العثور على الثابت، فلن يُستدعى التابع <code>const_missing</code>، وسيعيد التابع <code>const_defined?‎</code>  القيمة <code>false</code>.


في كل الأصناف أو الوحدات المفحوصة، إذا لم يكن الثابت موجودًا وكان هناك تحميل تلقائي (autoload) له ، فسيتم إعادة <code>true</code> مباشرة دون تحميل تلقائي (autoloading):
إن أُعطي المعامل <code>inherit</code> القيمة <code>false</code>، فسينحصر البحث عن الثوابت في المستقبِل (receiver):<syntaxhighlight lang="ruby">
IO.const_defined?(:SYNC)          #=> true, found in File::Constants (ancestor)
IO.const_defined?(:SYNC, false)  #=> false, not found in IO itself
</syntaxhighlight>في هذه الحالة، سيُطبَّق نفس منطق [[Ruby/Module/autoload|التحميل التلقائي]].


إذا لم يتم العثور على الثابت فلن يُستدعى التابع <code>const_missing</code> وسيعيد التابع القيمة <code>false</code>.
إذا كان المعامل المعطى اسم ثابت غير صالح، فسيُطلق الخطأ <code>[[Ruby/NameError|NameError]]</code> مع الرسالة "wrong constant name name":<syntaxhighlight lang="ruby">
إن إعطى الوسيط <code>inherit</code> القيمة false، سينحصر البحث عن الثوابت في المستقبِل:
Hash.const_defined? 'foobar'  #=> NameError: wrong constant name foobar


في هذه الحالة ، ينطبق نفس منطق التحميل الذاتي (autoloading).
</syntaxhighlight>
إذا كان الوسيط اسم ثابت غير صالح، فسيُطلق الخطأ <code>NameError</code> مع رسالة "wrong constant name name":
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="ruby">const_defined?(sym, inherit=true)→ true or false
<syntaxhighlight lang="ruby">const_defined?(sym, inherit=true)→ true or false
سطر 19: سطر 31:
==المعاملات==
==المعاملات==
===<code>sym‎</code>===
===<code>sym‎</code>===
 
[[Ruby/Symbol|رمز]] يمثل الثابت.
===<code>inherit‎</code>===
===<code>inherit‎</code>===
 
إن كانت قيمته <code>false</code>، فسينحصر البحث عن الثوابت في المستقبِل (receiver).
===<code>str‎</code>===
===<code>str‎</code>===
 
[[Ruby/String|سلسلة نصية]] تمثل الثابت.
 
==القيمة المعادة==
==القيمة المُعادة==
تعاد القيمة <code>true</code> إذا كانت الوحدة التي استُدعي معها أو أحد أسلافها (ancestors) تحوي الثابت <code>sym</code> أو <code>str</code> المعطى.
 
==أمثلة==
==أمثلة==
مثال على استخدام التابع <code>const_defined?‎</code>:
مثال على استخدام التابع <code>const_defined?‎</code>:<syntaxhighlight lang="ruby">Float.const_defined?(:EPSILON)      #=> true, found in Float itself
<syntaxhighlight lang="ruby">Float.const_defined?(:EPSILON)      #=> true, found in Float itself
Float.const_defined?("String")      #=> true, found in Object (ancestor)
Float.const_defined?("String")      #=> true, found in Object (ancestor)
BasicObject.const_defined?(:Hash)  #=> false‎</syntaxhighlight>
BasicObject.const_defined?(:Hash)  #=> false‎</syntaxhighlight>
==انظر أيضا==
==انظر أيضا==
* التابع <code>[[Ruby/Module/class_variables|class_variables]]</code>: يعيد  مصفوفة مكونة من أسماء متغيرات الصنف في الوحدة . يشمل ذلك أسماء متغيرات الصنف في كل الوحدات المُضمّنة، ما لم يتم تعيين الوسيط inherit عند القيمة <code>false</code>.
*التابع <code>[[Ruby/Module/class variables|class_variables]]</code>: يعيد  مصفوفة مكونة من أسماء متغيرات الصنف في الوحدة.
* التابع <code>[[Ruby/Module/const_get|const_get]]</code>: يتحقق  من وجود ثابت بالاسم المحدد في الوحدة . في حال تعيين <code>inherit</code>، فسيشمل البحث الأسلاف أيضًا (وكذلك <code>Object</code> إن كانت الوحدة من النوع <code>Module</code>).
*التابع <code>[[Ruby/Module/const get|const_get]]</code>: يتحقق  من وجود ثابت بالاسم المحدد في الوحدة.
 
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Module.html#method-i-const_defined-3F قسم التابع const_defined?‎ في الصنف Module‎ في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Module.html#method-i-const_defined-3F قسم التابع const_defined?‎ في الصنف Module‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 11:50، 19 نوفمبر 2018

يتحقق التابع const_defined?‎ مما إذا كانت الوحدة التي استُدعي معها أو أحد أسلافها (ancestors) تحوي الثابت المعطى.

Float.const_defined?(:EPSILON)      #=> true, found in Float itself
Float.const_defined?("String")      #=> true, found in Object (ancestor)
BasicObject.const_defined?(:Hash)   #=> false

إذا كانت الوحدة من النوع Module، فسيتم إضافة إلى ذلك فحص Object وكذلك أسلافه.

Math.const_defined?(:String)   #=> true, found in Object

في كل الأصناف أو الوحدات المفحوصة، إذا لم يكن الثابت موجودًا وكان التحميل التلقائي (autoload) مفعلًا له، فسيتم إعادة القيمة true مباشرةً دون تحميل تلقائي:

module Admin
  autoload :User, 'admin/user'
end
Admin.const_defined?(:User)   #=> true

إذا لم يتم العثور على الثابت، فلن يُستدعى التابع const_missing، وسيعيد التابع const_defined?‎ القيمة false. إن أُعطي المعامل inherit القيمة false، فسينحصر البحث عن الثوابت في المستقبِل (receiver):

IO.const_defined?(:SYNC)          #=> true, found in File::Constants (ancestor)
IO.const_defined?(:SYNC, false)   #=> false, not found in IO itself

في هذه الحالة، سيُطبَّق نفس منطق التحميل التلقائي. إذا كان المعامل المعطى اسم ثابت غير صالح، فسيُطلق الخطأ NameError مع الرسالة "wrong constant name name":

Hash.const_defined? 'foobar'   #=> NameError: wrong constant name foobar

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

const_defined?(sym, inherit=true) true or false
const_defined?(str, inherit=true) true or false

المعاملات

sym‎

رمز يمثل الثابت.

inherit‎

إن كانت قيمته false، فسينحصر البحث عن الثوابت في المستقبِل (receiver).

str‎

سلسلة نصية تمثل الثابت.

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

تعاد القيمة true إذا كانت الوحدة التي استُدعي معها أو أحد أسلافها (ancestors) تحوي الثابت sym أو str المعطى.

أمثلة

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

Float.const_defined?(:EPSILON)      #=> true, found in Float itself
Float.const_defined?("String")      #=> true, found in Object (ancestor)
BasicObject.const_defined?(:Hash)   #=> false‎

انظر أيضا

  • التابع class_variables: يعيد مصفوفة مكونة من أسماء متغيرات الصنف في الوحدة.
  • التابع const_get: يتحقق من وجود ثابت بالاسم المحدد في الوحدة.

مصادر