2017-12-07 7 views
0

(수신 및 반환 obj) 메서드를 호출하면 내 속성이 변경됩니다.matlab 다른 클래스 메서드에서 소품을 변경하는 클래스 메서드를 호출하는 방법

하지만 다른 메서드에서 해당 메서드를 호출하면 실패합니다. 나는 여러 가지 방법을 시도했지만 여전히 실패하고 있습니다.

classdef AClass 
    properties 
    A; 
    end 
    methods 
    function obj = ChangeA(obj, v) 
     obj.A = v; 
    end 
    function obj = CallChangeA(obj) 
     obj.ChangeA(4); 
     %obj = obj.ChangeA(4); 
     %ChangeA(obj, 4); 
     %obj = ChangeA(obj, 4); 
     % none of these works 
    end 
    end 
end 

% ------ script: 
a1 = AClass; 
a1.A = 1; 
a1.ChangeA(2); % a1.A = 2 

a2 = AClass; 
a2.A = 3; 
a2.CallChangeA(); % a2.A = 3 !!! not four 

코드를 작성하여 1 메소드에서 다른 메소드로 호출하면 속성을 업데이트 할 수 있습니까?

+0

샘플 코드가 작동하지 않습니다. 'ChangeA'는'a'를 입력으로하지만, 정의되지 않은'mz'로'obj.A'를 설정하려고 시도합니다. – excaza

답변

3

위의 주석처럼 예제 코드의 명백한 오타가 아닌 다른 점은 difference between MATLAB's Handle and Value classes을 살펴 보는 것이 좋습니다. 기본적으로 MATLAB 클래스는 값 클래스이므로 객체가 함수에 전달 될 때마다 독립적 인 복사본이 만들어집니다. ,

>> a1 = AClass; 
>> a1.A = 1 

a1 = 

    AClass with properties: 

    A: 1 

>> a1 = a1.CallChangeA() 

a1 = 

    AClass with properties: 

    A: 4 

핸들 클래스를, 다른 손에 대한 참조입니다

classdef AClass 
    properties 
     A; 
    end 
    methods 
     function obj = ChangeA(obj, a) 
      obj.A = a; 
     end 

     function obj = CallChangeA(obj) 
      obj = obj.ChangeA(4); 
     end 
    end 
end 

예상대로 기능 :이 객체를 변경하는 경우 당신은 출력으로 반환해야 예상도 어떤 함수로

classdef AClass < handle 
    properties 
     A; 
    end 
    methods 
     function ChangeA(obj, a) 
      obj.A = a; 
     end 

     function CallChangeA(obj) 
      obj.ChangeA(4); 
     end 
    end 
end 

: 객체의 위치 변경에 (다른 것들 사이)를 허용 하나의 기본 목적,

>> a1 = AClass; 
>> a1.A = 1; 
>> a1.A 

ans = 

    1 

>> a1.CallChangeA() 
>> a1.A 

ans = 

    4 
+0

그래서 주목 된 첫 번째 옵션은 정확했지만 객체의 복사본으로 함수를 호출해야합니다. 'a1 = a1.CallChangeA (4);' 그렇지 않으면'a1.CallChangeA (4); '는 AClass의 복사본을 생성하고 결과를 a1에 저장하지 않습니다. – pashute

+0

나는 당신이 무엇을 요구하고 있는지 이해하지 못합니다. 나는 'a1'의 복사본을 수정하는 옵션과 'a1'을 직접 수정하는 옵션을 모두 제공했습니다. – excaza

+0

감사의 말입니다. 당신의 대답을 이해하십시오. 더 이상 묻지 않는다. 코드를 수정해야하는 매우 자세한 전체 답변을 지적하십시오. 원래 코드에는 작동하지 않는다는 내용의 줄이있었습니다. 첫 번째 장소에서 함수를 호출하면 결과가 객체로 복사됩니다. 다시 감사합니다!!! – pashute