التابع Struct.new
في روبي
ينشئ التابع new
صنفًا فرعيًّا جديدًا أو نسخةً جديدةً من الصنف Struct
.
البنية العامة
new([class_name] [, member_name]+)→ StructClass
new([class_name] [, member_name]+, keyword_init: true) → StructClass
new([class_name] [, member_name]+) {|StructClass| block } → StructClass
new(value, ...) → object
StructClass[value, ...]→ object
يُستخدم الشكلان الأولان من التابع new
لإنشاء صنف فرعي جديد من Struct
يحمل الاسم class_name
، والذي يمكن أن يحتوي قيمةً مقابل كل وسيط member_name
. يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من البنية مثل أي صنف آخر.
إذا لم يُعطَ الوسيط class_name
، فسيُنشِئ التابع بنية مجهولة (anonymous structure). وبخلاف ذلك، سيظهر اسم هذه البنية كثابت في البنية ، لذلك يجب أن يكون فريدًا في جميع البنيات المٌعرّفة في النظام، ويجب أن يبدأ بحرف كبير. إسناد (assigning) بنية إلى ثابت سيؤدي إلى اعتماد البنية اسم الثابت كاسم لها.
# Create a structure with a name under Struct
Struct.new("Customer", :name, :address)
#=> Struct::Customer
Struct::Customer.new("Dave", "123 Main")
#=> #<struct Struct::Customer name="Dave", address="123 Main">
# Create a structure named by its constant
Customer = Struct.new(:name, :address)
#=> Customer
Customer.new("Dave", "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">
إذا أعطي الوسيط الاختياري keyword_init
القيمة true
، فسيأخذ التابع new
وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.
Customer = Struct.new(:name, :address, keyword_init: true)
Customer.new(name: "Dave", address: "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">
إذا تم إعطاء كتلة، فسيتم تقييمها في سياق البنية، وسيُمرّر إليها الصنف الذي تم إنشاؤه كمعامل:
Customer = Struct.new(:name, :address) do
def greeting
"Hello #{name}!"
end
end
Customer.new("Dave", "123 Main").greeting #=> "Hello Dave!"
هذه هي الطريقة الموصى بها لتخصيص البنيات، إذ تؤدي الأصناف الفرعية أو المجهولة للبنية إلى إنشاء أصناف مجهولة إضافية، والتي لن يتم استخدامها.
الشكلان الأخيران يُنشئان نسخةً جديدةً من صنف فرعي للصنف Struct
. يجب أن يكون عدد المعاملات value
المعطاة أصغر من أو يساوي عدد الخاصيات المعرّفة في البنية.
القيمة الافتراضية للمعاملات غير المعينة هي nil
. وإن كان عدد المعاملات المُمررة أكثر من عدد الخاصيات، فسيُطلَق الاستثناء ArgumentError
.
المعاملات
class_name
اسم البنية.
member_name
اسم العضو.
keyword_init
إذا أعطي هذا المعامل القيمة true
، فسيأخذ التابع new
وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.
value
قيمة.
القيمة المُعادة
تعاد بنية جديدة.
أمثلة
مثال على استخدام التابع new
:
Customer = Struct.new(:name, :address)
Customer.new("Dave", "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">
Customer["Dave"]
#=> #<struct Customer name="Dave", address=nil>
انظر أيضًا
- المعامل
==
: يتحقق إن كان لبنية ما نفس الصنف الفرعي ونفس قيم الأعضاء مقارنةً ببنية أخرى. - المعامل
[]
: يجلب قيمة عضو البنية المعطى، أو قيمة العضو ذي الفهرس المحدَّد. - التابع
each
: يعيد قيمة كل عضو من أعضاء البنية بالترتيب.