2017-09-28 13 views
0

MATLAB의 클래스에 관한 질문이 있습니다.MATLAB 클래스의 '선택적'속성 사용

필자는 파서를 쓰고 있는데, 항상 동일한 입력이있는 것은 아닙니다. 일부 변수는 항상 정의되지 않습니다. 여기에 짧게 모의 스크립트입니다

:

test_parser.m

classdef test_parser < matlab.mixin.Copyable 
    properties (AbortSet = true) 
     a 
     b   
    end 
end 

make_class.m 다른 입력 길이의 명령 창에서 전화

이제
function result = make_class(array) 
    result = test_parser; 
    result.a = array(1); 
    if length(array)>1 
     result.b=array(2); 
    end 
end 

>> make_class([10]) 
ans =  
    test_parser with properties:  
    a: 10 
    b: [] 

>> make_class([10,20])   
ans =  
    test_parser with properties:  
    a: 10 
    b: 20 

두 경우 모두 변수 b은 지정된대로 test_parser의 속성입니다. 내 소원은 b이 선택 사항이므로 입력에 b이있는 경우에만 표시됩니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까? 선택적 매개 변수는 실제로 속성이 아닌 것 같군요?

+0

을이 심미적 인 이유로 순수의 경우, 내가 솔루션이 될 것이다라고 말하고 싶지만 깨끗한 (즉, 중요한 비트입니다!) 대신의 코드를 유지하기 위해 출력을 표시하기 위해 "세미콜론 부족"에 의존하면서 간단히 클래스의 값을 표시하는 작은 함수를 만듭니다. – Wolfie

답변

1

선택적 속성을 원한다면 dynamicprops에서 클래스를 상속 할 수 있습니다. 그런 다음 addprop 명령을 사용하여 즉시 속성을 추가하고 isprop을 사용하여 속성이 존재하는지 테스트하고 PropertyAddedPropertyRemoved 이벤트를 수신하여 추가 또는 제거되는 속성에 응답 할 수도 있습니다. 당신의 예에서

, 당신은 그 때 사용합니다 :

classdef test_parser < matlab.mixin.Copyable & dynamicprops 
    properties (AbortSet = true) 
     a  
    end 
end 

function result = make_class(array) 
    result = test_parser; 
    result.a = array(1); 
    if length(array)>1 
     result.addprop('b') 
     result.b=array(2); 
    end 
end 

>> make_class([10]) 
ans = 
    test_parser with properties: 

    a: 10 
>> make_class([10,20]) 
ans = 
    test_parser with properties: 

    a: 10 
    b: 20 
+0

이것은 하나의 좋은 아이디어입니다! 나는 월요일에 그것을 시도 할 것이다. ;-) – Laenan