الفرق بين المراجعتين لصفحة: «Ruby/Object/clone»

من موسوعة حسوب
< Ruby‏ | Object
أنشأ الصفحة ب'{{DISPLAYTITLE:التابع Object.clone في روبي}} يُنتج التابع <code>clone</code> نسخةً سطحيةً (shallow copy) من الكائن المعط...'
 
طلا ملخص تعديل
سطر 1: سطر 1:
{{DISPLAYTITLE:التابع Object.clone في روبي}}
{{DISPLAYTITLE:التابع <code>Object.clone</code> في روبي}}
 
يُنتج التابع <code>clone</code> نسخةً سطحيةً (shallow copy) من الكائن المعطى. تُنسَخ متغيرات النسخة (instance variables) ولكن لا تُنسَخ الكائنات التي تشير إليها. يَنسَخ التابع <code>clone</code> حالة الكائن المجمدة (إلا إذا كان وسيط الكلمة المفتاحية <code>freez:</code> مساويًا للقيمة <code>falsefalse</code>) والتالفة (tainted). انظر أيضًا النقاش في صفحة التابع <code>Object.dup</code>.
يُنتج التابع <code>clone</code> نسخةً سطحيةً (shallow copy) من الكائن المعطى. تُنسَخ متغيرات النسخة (instance variables) ولكن لا تُنسَخ الكائنات التي تشير إليها. يَنسَخ التابع <code>clone</code> حالة الكائن المجمدة (إلا إذا كان وسيط الكلمة المفتاحية <code>freez:</code> مساويًا للقيمة <code>falsefalse</code>) والتالفة (tainted). انظر أيضًا النقاش في صفحة التابع <code>Object.dup</code>.


سطر 6: سطر 5:


== البنية العامة ==
== البنية العامة ==
<syntaxhighlight lang="ruby">
clone(freeze: true) → an_object
clone(freeze: true) → an_object
</syntaxhighlight>


== المعاملات ==
== المعاملات ==


=== freeze ===
=== <code>freeze</code> ===
وسيطُ كلمةٍ مفتاحيةٍ (keyword argument) يأخذ القيمة true أو false، إذ يحدِّد إن كان يراد نسخ حالة الكائن المجمَّدة.
وسيطُ كلمةٍ مفتاحيةٍ (keyword argument) يأخذ القيمة true أو false، إذ يحدِّد إن كان يراد نسخ حالة الكائن المجمَّدة.


سطر 17: سطر 18:


== أمثلة ==
== أمثلة ==
مثالٌ عن استخدام التابع clone:
مثالٌ عن استخدام التابع <code>clone</code>:<syntaxhighlight lang="ruby">
 
class Klass
class Klass
 
  attr_accessor :str
  attr_accessor :str
 
end
end
s1 = Klass.new      #=> #<Klass:0x401b3a38>
s1.str = "Hello"    #=> "Hello"
s2 = s1.clone      #=> #<Klass:0x401b3998 @str="Hello">
s2.str[1,4] = "i"  #=> "i"
s1.inspect          #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
s2.inspect          #=> "#<Klass:0x401b3998 @str=\"Hi\">"


s1 = Klass.new      #=> #<Klass:0x401b3a38>
</syntaxhighlight>
 
s1.str = "Hello"    #=> "Hello"
 
s2 = s1.clone       #=> #<Klass:0x401b3998 @str="Hello">
 
s2.str[1,4] = "i"   #=> "i"
 
s1.inspect          #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
 
s2.inspect          #=> "#<Klass:0x401b3998 @str=\"Hi\">"


== انظر أيضًا ==
== انظر أيضًا ==
* التابع class: يعيد صنف الكائن المعطى.
* التابع <code>[[Ruby/Object/class|class]]</code>: يعيد صنف الكائن المعطى.
* التابع dup: ينتج نسخةً سطحية من الكائن.
* التابع <code>[[Ruby/Object/dup|dup]]</code>: ينتج نسخةً سطحية من الكائن.
* التابع tap: يُدخل الكائن المعطى إلى الكتلة ثم يعيده.
* التابع yield_self: يُدخل الكائن المعطى إلى الكتلة ويُعيد ناتج تنفيذ هذه الكتلة.


*التابع <code>[[Ruby/Object/tap|tap]]</code>: يُدخل الكائن المعطى إلى الكتلة ثم يعيده.
*التابع <code>[[Ruby/Object/yield self|yield_self]]</code>: يُدخل الكائن المعطى إلى الكتلة ويُعيد ناتج تنفيذ هذه الكتلة.
== مصادر ==
== مصادر ==
* [http://ruby-doc.org/core-2.5.1/Object.html#method-i-clone صفحة التابع clone في الصنف Object في توثيق روبي الرسمي.]
* [http://ruby-doc.org/core-2.5.1/Object.html#method-i-clone صفحة التابع clone في الصنف Object في توثيق روبي الرسمي.]

مراجعة 15:58، 22 نوفمبر 2018

يُنتج التابع clone نسخةً سطحيةً (shallow copy) من الكائن المعطى. تُنسَخ متغيرات النسخة (instance variables) ولكن لا تُنسَخ الكائنات التي تشير إليها. يَنسَخ التابع clone حالة الكائن المجمدة (إلا إذا كان وسيط الكلمة المفتاحية freez: مساويًا للقيمة falsefalse) والتالفة (tainted). انظر أيضًا النقاش في صفحة التابع Object.dup.

قد يمتلك هذا التابع سلوكًا  محدّدًا بالصنف (class-specific). إذا كان كذلك، سيُوثَّق السلوك تحت التابع ‎.initialize_copy من نفس الصنف.

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

clone(freeze: true)  an_object

المعاملات

freeze

وسيطُ كلمةٍ مفتاحيةٍ (keyword argument) يأخذ القيمة true أو false، إذ يحدِّد إن كان يراد نسخ حالة الكائن المجمَّدة.

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

تعاد نسخةٌ سطحيةٌ من الكائن المعطى.

أمثلة

مثالٌ عن استخدام التابع clone:

class Klass
   attr_accessor :str
end
s1 = Klass.new      #=> #<Klass:0x401b3a38>
s1.str = "Hello"    #=> "Hello"
s2 = s1.clone       #=> #<Klass:0x401b3998 @str="Hello">
s2.str[1,4] = "i"   #=> "i"
s1.inspect          #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
s2.inspect          #=> "#<Klass:0x401b3998 @str=\"Hi\">"

انظر أيضًا

  • التابع class: يعيد صنف الكائن المعطى.
  • التابع dup: ينتج نسخةً سطحية من الكائن.
  • التابع tap: يُدخل الكائن المعطى إلى الكتلة ثم يعيده.
  • التابع yield_self: يُدخل الكائن المعطى إلى الكتلة ويُعيد ناتج تنفيذ هذه الكتلة.

مصادر