ماتلاب نسخة منشئ
-
05-07-2019 - |
سؤال
هل هناك طريقة أفضل لتنفيذ نسخة 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
ومما يجعل طريقة أكثر فائدة
لا تنتمي إلى StackOverflow