2012-01-23 4 views
3

저는 matlab 클래스를 처음 사용하고 몇 가지 자습서를 거쳐 이제 하나를 만들려고합니다. 내 방법 섹션에서는 그러나, 내가 뭘하려고했는지 문제가 있습니다. 객체는 생성자에 대한 입력으로 전달할 나머지 속성을 생성하는 데 필요한 단일 정보 만 필요합니다. 나는 시도하고이 프로그램을 실행할 때 그때, 그러나 ... 나는 ... 나머지 속성을 작성하는 방법 섹션에서 두 개 더 함수를 호출 아래 의사 코드를 참조 할 수 있어야Matlab 클래스 메서드 오류

methods 
    function obj=myConstructor(input) 
     obj.property1=input; 
     getProperty2(obj); 
     getProperty3(obj); 
    end 

    function getProperty2(obj) 
     obj.property2 = do something and save in property2... 
    end 

    function getProperty3(obj) 
     obj.property3 = do something and save in property3... 
    end 

end 

을 생각하지도 않는다 속성 2 또는 3은 ... 생성자에 전달하는 값만 할당됩니다. 초기화를 수행하는 방법에 대한 도움이나 아이디어는 많은 도움이 될 것입니다. 감사.

답변

3

우선, 객체의 속성 값을 검색 (즉, 취득)하기 위해 보통 get 방법이 사용된다. 무언가를 계산하지 마라.

다음으로 MATLAB 개체 모델에는 값 개체와 핸들 개체의 두 가지 종류가 있습니다. 구별은 중요하지만, 아무 것도 언급하지 않기 때문에, 나는 당신이 가치 객체를 사용하고 있다고 가정 할 것이다. 핸들 객체의 동작은 완전히 다릅니다.

Java 및 다른 대부분의 언어에서는 변경된 객체를 반환해야합니다. 대부분의 가능성이 calculateP? 방법은 개인 정적 방법으로 더 나은 속

classdef MyClass 
    properties 
     p1, p2, p3; 
    end 
    methods 
     function obj = MyClass(input) 
      obj.p1 = input; 
      obj = obj.calculateP2(input); 
      obj = obj.calculateP3(input); 
     end 
     function obj = calculateP2(obj, input) 
      obj.p2 = someLengthyCalculation(input); 
     end 
     function obj = calculateP3(obj, input) 
      obj.p3 = someOtherLengthyCalculation(input); 
     end 
    end 
end 
이 더 깨끗하게 할 수

: 그래서 MATLAB에서이 같은 일 것입니다. 이 모든 것은이 메소드에 전달하려는 양에 따라 다릅니다.

+0

질문하는 것이 가장 좋지 않을 수도 있지만 새로운 질문을 시작하고 싶지 않습니다. 왜 'obj = obj.calculateP2'대신 'obj = calculateP2 (input);'을 사용할 수 없습니까? (입력); 왜 이것이 에러가됩니까? (MATLAB 경로에'calculateP2'가 없다면)? 왜 생성자는 클래스 메소드에 대해 알고 있지 않지만 obj.method() 표기법을 사용하여 메소드를 지정해야합니까? 다음 표기법 중 하나를 선호합니까? obj = obj.calculateP2 (입력); 또는'obj = MyClass.calculateP2 (입력);'? – Erik

+0

@ Erik : 현재 구문이 매우 명확하고 따라서 오류가 발생하지 않는 (즉, 장면 뒤에서 일어나는 일을 알아야 할 가능성이 가장 적습니다 (우선 순위 규칙 등)) 것으로 생각됩니다. 'MyClass.calculateP2 (input)'도 유효하지 않음을 주목하라 : 이것은 정적 함수를 호출하는 방법이다! (비 정적 인) 메소드를 호출하고 싶다면'obj.method (args)'또는'method (obj, args)'의 두 가지 가능성이있다. 나는 전자를 선호하지만 때로 후자는 표준 인터페이스를 제공하는 데 유용합니다. 'plot (obj)'. 자세한 내용은 채팅 또는 질문 :-)을 열어주세요. – Egon

관련 문제