English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
المتغير هو مكان التخزين الذي يحتوي على أي بيانات يمكن استخدامها من قبل أي برنامج.
يدعم Ruby خمس أنواع من العوامل.
باستخدام الحروف الصغيرة أو الشرطية في البداية: المتغيرات (Variable).
باستخدام $ في البداية: المتغيرات العالمية (Global variable).
باستخدام @ في البداية: المتغيرات المثيلة (Instance variable).
باستخدام @@ في البداية: المتغيرات الكلاسيكية (Class variable) يتم مشاركة المتغيرات الكلاسيكية في سلسلة الإرث بأكملها
باستخدام الحروف الكبيرة: الثوابت (Constant).
لقد تعرفت على هذه العوامل بشكل عام في الفصول السابقة، هذا الفصل سيقوم بشرح هذه العوامل الخمسة بشكل مفصل.
全局变量以 $ 开头。未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告。
给全局变量赋值会改变全局状态,所以不建议使用全局变量。
下面的示例显示了全局变量的用法。
#!/usr/bin/ruby # -*- coding: UTF-8 -*- $global_variable = 10 class Class1 def print_global puts "全局变量在 Class1 中输出为 #$global_variable" end end class Class2 def print_global puts "全局变量在 Class2 中输出为 #$global_variable" end end class1obj = Class1.new class1obj.print_global class2obj = Class2.new class2obj.print_global
在这里,$global_variable 是全局变量。这将产生以下结果:
注意:在 Ruby 中,您可以通过在变量或常量前面放置 # 字符,来访问任何变量或常量的值。
全局变量在 Class1 中输出为 10 全局变量在 Class2 中输出为 10
示例变量以 @ 开头。未初始化的示例变量的值为 nil,在使用 -w 选项后,会产生警告。
下面的示例显示了示例变量的用法。
#!/usr/bin/ruby class Customer initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "رقم هوية العميل @cust_id" puts "اسم العميل @cust_name" puts "عنوان العميل @cust_addr" end end # إنشاء رمز cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") # استدعاء الدالة cust1.display_details() cust2.display_details()
在这里,@cust_id、@cust_name 和 @cust_addr 是示例变量。这将产生以下结果:
Customer id 1 Customer name John Customer address Wisdom Apartments, Ludhiya Customer id 2 Customer name Poul Customer address New Empire road, Khandala
类变量以 @@ 开头,且必须初始化后才能在方法定义中使用。
引用一个未初始化的类变量会产生错误。类变量在定义它的类或模块的子类或子模块中可共享使用。
在使用 -w 选项后,重载类变量会产生警告。
下面的示例显示了类变量的用法。
#!/usr/bin/ruby class Customer @@no_of_customers=0 initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "رقم هوية العميل @cust_id" puts "اسم العميل @cust_name" puts "عنوان العميل @cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "عدد العملاء الكلي: #@@no_of_customers" end end # إنشاء رمز cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") # استدعاء الدالة cust1.total_no_of_customers() cust2.total_no_of_customers()
في هذا السياق، @@no_of_customers هو متغير فئة. سيؤدي ذلك إلى نتائج التالي:
عدد العملاء الكلي: 1 عدد العملاء الكلي: 2
تبدأ المتغيرات المحلية بأحرف صغيرة أو شرطية _. نطاق المتغيرات المحلية من class،module،def أو do إلى النهاية المقابلة أو من الأسهم الكبيرة إلى الأسهم الصغيرة {}.
عند استدعاء متغير محلي غير مُقيم، يتم تفسيره كاستدعاء دالة بدون معاملات.
يمكن اعتبار تعيين قيمة لمتغير محلي غير مُقيم كإعلان متغير. سيبقى المتغير قائمًا حتى نهاية المجال الحالي. يمكن تحديد حياة المتغيرات المحلية عند تحليل البرنامج من قبل Ruby.
في المثال السابق، المتغيرات المحلية هي id،name وaddr.
تبدأ المعادلات الدائمة بأحرف كبيرة. يمكن الوصول إلى المعادلات الدائمة المُحددة داخل فئة أو وحدة من داخلها، والوصول إلى المعادلات الدائمة المحددة خارجها يمكن القيام بها بشكل عالمي.
لا يمكن تعريف المعادلات الدائمة داخل الدوال. ستسبب تعريف معادلة غير مُقيمة خطأ. ستظهر تحذير عند تعيين قيمة لمعادلة مُقيمة.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- class Example VAR1 = 100 VAR2 = 200 def show puts "قيمة الكوامن الأولى هي #{VAR1}" puts "قيمة الكوامن الثانية هي #{VAR2}" end end # إنشاء رمز object=Example.new() object.show
في هذا السياق، VAR1 و VAR2 هي كوامن. هذا سينتج النتيجة التالية:
قيمة الكوامن الأولى هي 100 قيمة الثانية للكوامن هي 200
هي متغيرات خاصة، تملك مظهر متغيرات المحلية، لكن سلوكها مثل الكوامن. لا يمكنك تعيين أي قيمة لهذه المتغيرات.
self: الرمز المستقبل الحالي.
true: يمثل القيمة true.
false: يمثل القيمة false.
nil: يمثل القيمة غير المحددة.
__FILE__: اسم ملف المصدر الحالي.
__LINE__: رقم السطر الحالي في ملف المصدر.