سؤال

هل هناك طريقة أفضل لتنفيذ نسخة construcor للماتلاب لفئة مقبض المشتقة الأخرى من إضافة منشئ مع مدخل واحد وصراحة نسخ خصائصه؟

obj.property1 = from.property1;  
obj.property2 = from.property2;

وغيرها.

وشكرا، داني

هل كانت مفيدة؟

المحلول

إذا كنت ترغب في حل سريع وقذرة أن يتحمل كامل الخصائص يمكن نسخ، نلقي نظرة على وظيفة PROPERTIES. وإليك مثالا على الفئة التي نسخ كافة الخصائص تلقائيا:

classdef Foo < handle
  properties
    a = 1;
  end
  methods
    function F=Foo(rhs)
      if nargin==0
        % default constructor
        F.a = rand(1);
      else
        % copy constructor
        fns = properties(rhs);
        for i=1:length(fns)
          F.(fns{i}) = rhs.(fns{i});
        end
      end
    end
  end
end

ووبعض رمز اختبار:

f = Foo(); [f.a Foo(f).a] % should print 2 floats with the same value.

نصائح أخرى

وهناك طريقة أخرى سهلة لإنشاء نسخ من الأشياء مقبض باستخدام matlab.mixin.Copyable. إذا كنت ترث من هذه الفئة ستحصل على طريقة نسخة التي سوف نسخ كافة الخصائص بالنسبة لك.

classdef YourClass < matlab.mixin.Copyable
...

a = YourClass;
b = copy(a); % b is a copy of a

وهذه الطريقة نسخة بإنشاء نسخة دون استدعاء منشئات أو مجموعة وظائف من الخصائص. هذا ما ينبغي أن يكون أسرع. يمكنك أيضا تخصيص سلوك نسخة من تجاوز بعض الأساليب.

ويمكنك حتى استخدام

try
 F.(fns{i}) = rhs.(fns{i});
end

ومما يجعل طريقة أكثر فائدة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top