【发布时间】:2017-10-20 14:40:45
【问题描述】:
我需要将结构名称的一部分传递给函数。
可用结构示例:
systems.system1.stats.equityCurve.relative.exFee
systems.system1.stats.equityCurve.relative.inFee
systems.system2.stats.equityCurve.relative.exFee
systems.system2.stats.equityCurve.relative.inFee
systems.system1.returns.aggregated.exFee
systems.system1.returns.aggregated.inFee
systems.system2.returns.aggregated.exFee
systems.system2.returns.aggregated.inFee
... This goes on...
在一个函数中,我循环遍历结构如下:
function mat = test(fNames)
feeString = {'exFee', 'inFee'};
sysNames = {'system1', 'system2'};
for n = 1 : 2
mat{n} = systems.(sysNames{n}).stats.equityCurve.relative.(feeString{n});
end
end
我喜欢在循环中灵活处理的是中间部分,即systems.(sysNames{n}) 之后和.(feeString{n}) 之前的部分(比较示例)。
我现在正在寻找一种将中间部分作为输入参数fNames 传递给函数的方法。循环应该包含类似
mat{n} = systems.(sysNames{n}).(fName).(feeString{n});
【问题讨论】:
-
处理动态字段名称可能会很麻烦,特别是如果您没有固定数量的字段,所以我唯一的建议(虽然它很笨重)是使用类似的东西:eval([ 'mat{n} = systems.(sysNames{n}).',fNames,'.(feeString{n});'])
-
@DanielAldrich 请不要。这与理智的数据处理完全相反。
eval速度慢且不安全,它使代码不可读。动态字段名称很好用,而且语义正确。请不要试图说服无辜的用户相反。我们正在努力处理matlab 标签,以使提问者远离eval厄运之路。