Matlab 使用对象的多个属性调用函数
对于(MEX)函数调用,一次传递一个对象的多个属性会非常好。而不是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]
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