首页 > 解决方案 > Octave中的交易功能不起作用

问题描述

我有一个在 Matlab 中运行时编写(并且可以工作)的 .m 文件,但是当我在 Octave 中运行它时,出现错误。我知道这两个程序有它们的区别,我只是不知道如何重写有问题的代码行以使其工作。

这是代码。最后一行是导致问题的行:

dirr = '/my/file/path/'
foldlist = dir([dirr '*.wav']);
foldname={};
[foldname{1:length(foldlist),1}] = deal(foldlist.name)

这是运行时出现的错误:

error: Invalid call to deal.  Correct usage is:
-- Function File: [R1, R2, ..., RN] = deal (A)
-- Function File: [R1, R2, ..., RN] = deal (A1, A2, ..., AN)

看起来很简单,给出错误解释,我只是不知道如何重写它。

标签: matlaboctave

解决方案


你应该能够做到这一点:

foldname={foldlist.name};

这也是 MATLAB 中更好的方法。

foldlist.name是逗号分隔的值列表。这些通过在其周围放置花括号来捕获在单元阵列中。相当于{a,b,c}

原始代码的问题是,在初始化之后foldname={},索引foldname{1:length(foldlist),1}是非法的。MATLAB 倾向于在赋值左侧的索引超出范围时添加空单元格。Octave 也是如此,但是这里索引数组周围有方括号,而且似乎 Octave 并没有以相同的方式解析这个特定的位。


推荐阅读