الفرق بين المراجعتين ل"Ruby/Module/const defined-3F"

من موسوعة حسوب
< Ruby‏ | Module
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>‎const_defined?‎‎</code> الخاص بالصنف <code>Module</code> في روبي}}</noinclude> تصنيف: Rub...')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Module]]
 
[[تصنيف: Ruby Module]]
يتحقق التابع <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>Object</code> وكذلك أسلافه.<syntaxhighlight lang="ruby">
 +
Math.const_defined?(:String)  #=> true, found in Object
  
إذا كانت الوحدة من النوع <code>Module</code> ، فسيتم فحص <code>Object</code> وكذلك أسلافه:
+
</syntaxhighlight>في كل الأصناف أو الوحدات المفحوصة، إذا لم يكن الثابت موجودًا وكان هناك تحميل تلقائي (autoload) له، فسيتم إعادة <code>true</code> مباشرة دون تحميل تلقائي (autoloading):<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>في هذه الحالة، سينطبق نفس منطق التحميل الذاتي (autoloading).
  
إذا لم يتم العثور على الثابت فلن يُستدعى التابع <code>const_missing</code> وسيعيد التابع القيمة <code>false</code>.
+
إذا كان الوسيط المعطى اسم ثابت غير صالح، فسيُطلق الخطأ <code>NameError</code> مع الرسالة "wrong constant name name":<syntaxhighlight lang="ruby">
إن إعطى الوسيط <code>inherit</code> القيمة false، سينحصر البحث عن الثوابت في المستقبِل:
+
Hash.const_defined? 'foobar'  #=> NameError: wrong constant name foobar
 +
 
 +
</syntaxhighlight>
  
في هذه الحالة ، ينطبق نفس منطق التحميل الذاتي (autoloading).
 
إذا كان الوسيط اسم ثابت غير صالح، فسيُطلق الخطأ <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: سطر 32:
 
==المعاملات==
 
==المعاملات==
 
===<code>sym‎</code>===
 
===<code>sym‎</code>===
 +
رمز يمثل الثابتة.
  
 
===<code>inherit‎</code>===
 
===<code>inherit‎</code>===
 +
إن أُعطي  القيمة <code>false</code>، سينحصر البحث عن الثوابت في المستقبِل (receiver):
  
 
===<code>str‎</code>===
 
===<code>str‎</code>===
 
+
سلسلة نصية تمثل الثابتة.
  
 
==القيمة المُعادة==
 
==القيمة المُعادة==
 +
يعيد التابع <code>const_defined?‎</code> القيمة <code>true</code> إذا كانت الوحدة التي استُدعي معها أو أحد أسلافها (ancestors) تحتوي الثابت  المعطى.
  
 
==أمثلة==
 
==أمثلة==
سطر 33: سطر 49:
 
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‎ في توثيق روبي الرسمي.]

مراجعة 22:24، 26 أكتوبر 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 مباشرة دون تحميل تلقائي (autoloading):

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

في هذه الحالة، سينطبق نفس منطق التحميل الذاتي (autoloading). إذا كان الوسيط المعطى اسم ثابت غير صالح، فسيُطلق الخطأ 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‎

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

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

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

أمثلة

مثال على استخدام التابع 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: يتحقق من وجود ثابت بالاسم المحدد في الوحدة .

مصادر