在 MATLAB class 中使用 'optional' 属性

Using 'optional' properties in a MATLAB class

我有一个关于 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

现在使用不同的输入长度从命令 window 调用:

>> 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 就出现。

实现此目标的最佳方法是什么?我想一个可选参数并不是真正的 属性?

如果您想要可选属性,您可以从 dynamicprops 继承您的 class。然后,您可以使用命令 addprop 动态添加属性,使用 isprop 测试 属性 是否存在,甚至通过监听事件 [=14] 来响应添加或删除的属性=] 和 PropertyRemoved.

在您的示例中,您将使用:

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