Octave中deal函数无法运行:Matlab兼容代码修改求助
解决Matlab代码在Octave中运行的字段提取问题
你遇到的问题核心是Octave和Matlab在结构体数组字段批量提取的语法兼容上有差异,最后一行的deal用法在Octave里不适用。
问题根源
在Matlab中,当foldlist是结构体数组时,调用foldlist.name会返回一个逗号分隔的列表,配合deal就能把每个元素分配给细胞数组的对应位置。但Octave对这种语法的处理逻辑和Matlab不同,直接这么写就会触发错误。
修改方案
你可以用更简洁且兼容Octave的方式替换最后一行代码,两种写法任选其一都能达到原代码的效果:
写法一(简洁版)
替换原代码最后一行:
[foldname{1:length(foldlist),1}] = deal(foldlist.name)
为:
foldname = {foldlist.name};
写法二(高兼容版)
如果某些旧版Octave对上面的写法仍有兼容问题,也可以用arrayfun实现:
foldname = arrayfun(@(item) item.name, foldlist, 'UniformOutput', false);
这两种写法都会把foldlist中每个结构体的name字段提取出来,存入foldname细胞数组,和你原来的Matlab代码功能完全一致,且能在Octave中正常运行。
内容的提问来源于stack exchange,提问作者AmericanMade
相关产品推荐
相关产品推荐

