Matlab 使用对象的多个属性调用函数

Matlab 使用对象的多个属性调用函数,matlab,function,oop,properties,Matlab,Function,Oop,Properties,对于(MEX)函数调用,一次传递一个对象的多个属性会非常好。而不是foo(myObj.propA,myObj.propB)我想要类似foo(myObj.propA,propB) 这可能吗? 使用structs,可以使用函数从多个字段获取数据,例如: getfield(myStruct, {index}, {'fieldA', 'fieldB'}) 但不幸的是,以下尝试从对象获取多个属性会导致错误(索引超过矩阵维度): 可能唯一的可能性是编写一个返回多个输出参数的函数: [varargout]

对于(MEX)函数调用,一次传递一个对象的多个属性会非常好。而不是
foo(myObj.propA,myObj.propB)
我想要类似
foo(myObj.propA,propB)

这可能吗?

使用structs,可以使用函数从多个字段获取数据,例如:

getfield(myStruct, {index}, {'fieldA', 'fieldB'})
但不幸的是,以下尝试从对象获取多个属性会导致错误(索引超过矩阵维度):

可能唯一的可能性是编写一个返回多个输出参数的函数:

[varargout] = getProps(object,propnames)

for p=1:numel(propnames)
    varargout{p} = object.(propnames{p});
end

但是如果我调用另一个函数并将该函数作为输入,例如
sum(getProps(myObj,propnames))
只传递了
getProps
的第一个输出参数,我陷入绝望。还有其他方法吗?

对于一个对象,你应该使用
get
,而不是
getfield
(或者像你所展示的循环中的动态访问)

这并不适用于所有对象,但适用于MATLAB图形对象。要处理任何类,您可以使用您的函数,但要使用自定义单元格输出,而不是
varargout

function C = getProps(object,propnames)

for p = 1:numel(propnames),
    C{p} = object.(propnames{p});
end

然后,在您编写的任何函数中,都可以得到一个以逗号分隔的所有属性列表,该列表带有
C{:}
,这将适用于希望每个属性名称输入作为单独参数的函数(例如
C=getProps(myObj,propnames);x=myFun(h,C{:})

也许我的MatlabR2011B太旧了,但输入并没有真正单独地提供给函数。例如,对于属性值为
A=1
B=3
的对象:
C=getProps(obj,{'A''B'})
给出
C=[1][3]
C{:}
返回逗号分隔的列表
ans=1;ans=3
但是sum(C{:})返回
ans=1
@JaBe,然后执行
myfun(C{:})
将给出
myfun
两个输入。当您执行
sum(C{:})时,这相当于
sum(1,3)
,它计算第三维的和,而不是两个数字的和。您需要连接以获得一个符号数组:
[C{:}]
@JaBe如果这提供了您解决此问题所需的信息,请接受。谢谢!)
>> h = figure;
>> get(h,{'Position','Renderer'})
ans = 
    [1x4 double]    'opengl'
function C = getProps(object,propnames)

for p = 1:numel(propnames),
    C{p} = object.(propnames{p});
end