2013-12-17 2 views
2

열거 클래스를 Matlab의 비 정적 메서드와 결합하려고합니다. 'LogEvent'클래스를 만들고 싶습니다.이 클래스는 입력 인수로 열거 형 멤버 (예 : LogEvent.INFO, LogEvent.ERROR 또는 LogEvent.WARNING)와 문자열을 취하는 'log'함수를 가지고 있습니다. 이 메시지를 파일에 추가합니다. 이 프로그램은 다른 프로그램에 대해이 LogEvent 클래스를 반복적으로 사용하기를 원합니다.이 클래스는 생성 중에 지정된 'fileName'속성을 가지며 출력 파일을 참조합니다. 나는 그러나 약간의 결과에이 문제를 인터넷 검색을 시도하지만 내가이 완전히 잘못된 방향으로 접근 할 수 있도록 인정 하듯이 내가 프로그래밍 경험이 많지 않아 지금Matlab - 비 정적 메서드로 열거 클래스 결합

classdef LogEvent 
%Class definition for logging events. 

properties 
    fileName; 
end 

methods 
    function obj = LogEvent(outFile) 
     obj.fileName = outFile; 
    end 

    function log(obj,type,logStr) 

     switch (type) 
      case LogEvent.INFO 
       typeStr = 'INFO'; 
      case LogEvent.WARNING 
       typeStr = 'WARNING'; 
      case LogEvent.ERROR 
       typeStr = 'ERROR'; 
     end 

     FID = fopen(obj.fileName,'a'); 
     Str = sprintf('%s - %s: %s\n',datestr(now),typeStr,logStr); 
     fprintf(FID,Str); 
     fclose(FID); 
    end 
end 

enumeration 
    INFO, 
    WARNING, 
    ERROR 
end 
end 

: 다음은 내 classdef 파일을 형성하는 코드는 - 머리에 못을 박는 특정 키워드를 알지 못할 수도 있습니다. 이 클래스의 여러 인스턴스를 만들어야 (다른 파일을 참조) 할 필요가 있기 때문에 내 생각이지만 '로그'함수는 정적이 아니어야합니다. 나는이 오류 메시지가 불구하고이 클래스의 인스턴스를 만들려고 얻을 다음 'ZOHB'클래스 내부

Error using LogEvent 
While creating an instance of class 'LogEvent': 
No value has been provided for the enumeration member named 'INFO'. For an 
enumeration derived from a built-in class, a value must be provided for each 
enumeration member. 

Error in ZOHB (line 10) 
obj.Log = LogEvent('ZOHB.log'); 

을, 나는 LOGEVENT 클래스의 인스턴스를 만들려고하고 ZOHB 클래스의 속성으로 지정 .

답변

1

Matlab의 열거 체계에서 열거 된 값은 열거 형을 포함하는 클래스의 인스턴스 여야합니다. 그래서 예. WARNING은 특정 LogEvent 인스턴스를 가져야합니다.

예. 워드 프로세서에서이 예처럼 : - 기본적으로,이 오류 메시지가 말하는 당신의 경우에 의미

classdef Bearing < uint32 
    enumeration 
     North (0) 
     East (90) 
     South (180) 
     West (270) 
    end 
end 

, 당신은 당신의 LOGEVENT-생성자에 딱 맞는 인수를 지정해야 할 것이다. 물론 당신의 유스 케이스에서는 완전히 엉터리입니다. ,

properties (Constant) 
    INFO = 1; 
    WARNING = 2; 
    ERROR = 3; 
end 

당신은 정적 인 방식으로 상수에 액세스 할 수 있도록 나머지 코드해야이 버전의 꽤 많은 일 : 당신의 특별한 경우

, 당신은 더 나은 ERROR, WARNINGINFO 일정한 속성을 만들 것입니다.

+0

고마워요! 테스트 및 작업 중 ... – Charlie

관련 문제