对于(MEX)函数调用,一次传递一个对象的多个属性会非常好。而不是foo(myObj.propA, myObj.propB)
我想要foo(myObj.[propA,propB]
。
这可能吗?
使用结构可以使用getfield()
函数从多个字段中获取数据,例如:
getfield(myStruct, {index}, {'fieldA', 'fieldB'})
但不幸的是,以下尝试从对象获取多个属性会导致错误(索引超出矩阵维度):
getfield(myObj, {index}, {'propA', 'propB'})
也许唯一的可能性就是编写一个返回多个输出参数的函数:
[varargout] = getProps(object,propnames)
for p=1:numel(propnames)
varargout{p} = object.(propnames{p});
end
但是如果我用该函数调用另一个函数作为输入,例如sum(getProps(myObj,propnames))
只传递getProps
的第一个输出参数,我陷入绝望。还有其他办法吗?
答案 0 :(得分:1)
对于某个对象,您使用的是get
,而不是getfield
(或者像您所示的循环中的动态访问权限)。
>> h = figure;
>> get(h,{'Position','Renderer'})
ans =
[1x4 double] 'opengl'
这不适用于所有对象,但对于MATLAB图形对象,它确实有效。要处理任何类,您可以使用您的函数,但使用自定义单元格输出而不是varargout
:
function C = getProps(object,propnames)
for p = 1:numel(propnames),
C{p} = object.(propnames{p});
end
然后在你编写的任何函数中,你可以得到一个逗号分隔的所有属性的列表C{:}
,这将适用于一个函数,它希望每个属性名称作为一个单独的参数输入(例如{{1 }}