调用具有对象的多个属性的函数

时间:2014-10-31 12:37:27

标签: matlab function oop properties

对于(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的第一个输出参数,我陷入绝望。还有其他办法吗?

1 个答案:

答案 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 }}