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