하나의 입력으로 생성자를 추가하고 속성을 명시 적으로 복사하는 것 이외에 handle 파생 클래스에 대한 MATLAB의 복사 구문을 구현하는 더 좋은 방법이 있습니까?Matlab 복사 생성자
obj.property1 = from.property1;
obj.property2 = from.property2;
등
감사합니다, 당신은 모든 속성을 복사 할 수 있습니다 가정합니다 빠른 - 및 - 더러운 솔루션을 원하는 경우 다니
하나의 입력으로 생성자를 추가하고 속성을 명시 적으로 복사하는 것 이외에 handle 파생 클래스에 대한 MATLAB의 복사 구문을 구현하는 더 좋은 방법이 있습니까?Matlab 복사 생성자
obj.property1 = from.property1;
obj.property2 = from.property2;
등
감사합니다, 당신은 모든 속성을 복사 할 수 있습니다 가정합니다 빠른 - 및 - 더러운 솔루션을 원하는 경우 다니
는, 속성 기능을 살펴. 다음은 클래스의 예이 자동으로 복사 모든 속성 :
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.
생성자에서 속성을 복사하기 전에 "rhs"가 Foo 유형 (isa (rhs, 'Foo'))인지 테스트해야합니다. – Marc
심지어
더 유용한 방법을 만드는try
F.(fns{i}) = rhs.(fns{i});
end
을 사용할 수 있습니다
matlab.mixin.Copyable을 사용하여 손잡이 개체의 복사본을 만드는 또 다른 쉬운 방법이 있습니다. 이 클래스를 상속하면 모든 속성을 복사하는 복사 메서드가 생깁니다.
classdef YourClass < matlab.mixin.Copyable
...
a = YourClass;
b = copy(a); % b is a copy of a
이 복사 방법은 생성자를 호출하거나 속성을 설정하지 않고 복사본을 만듭니다. 그래서 이것은 더 빨라야합니다. 또한 일부 메소드를 대체하여 복사 동작을 사용자 정의 할 수 있습니다.
하위 클래스를 복사하려는 경우, 즉 a가 YourClass의 일부 하위 클래스의 인스턴스이지만 b가 하위 클래스가 아니기를 바란다면 (즉, 수퍼 클래스 (YourClass) 기능을 원한다면)? –
이렇게하려면 메소드를 작성해야합니다. – Navan
당신은 정교하게 할 수 있습니까? 어떤 버전의 Matlab을 사용하고 있습니까? – Azim
저는 Matlab 2008a를 사용하고 있으며 클래스를 주로 참조로 사용합니다 (따라서 핸들에서 파생됩니다).하지만 때때로 값으로 전달해야합니다. classdef 요청 < 특성 가격 양 단부 RequestManager classdef 단부 – Dani
< 특성 requestsHistory 단부 방법 함수 HandleRequest (이 요청) this.requestsHistory = this.requestsHistory 요청] 처리를 처리; end end end – Dani