Matlab 八度音阶中的deal函数不工作

Matlab 八度音阶中的deal函数不工作,matlab,octave,Matlab,Octave,我有一个.m文件,它是在Matlab中运行时编写的(并且可以运行),但是当我在倍频程中运行它时,我得到了一个错误。我知道这两个程序有它们的不同之处,我只是不知道如何重新编写有问题的代码行以使其工作 这是密码。最后一行是导致问题的那一行: dirr = '/my/file/path/' foldlist = dir([dirr '*.wav']); foldname={}; [foldname{1:length(foldlist),1}] = deal(foldlist.name) 下面是运行时

我有一个.m文件,它是在Matlab中运行时编写的(并且可以运行),但是当我在倍频程中运行它时,我得到了一个错误。我知道这两个程序有它们的不同之处,我只是不知道如何重新编写有问题的代码行以使其工作

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

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)

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

您应该能够做到这一点:

foldname={foldlist.name};
这也是MATLAB中更好的方法

foldlist.name
是一个以逗号分隔的值列表。通过在单元格数组周围放置花括号,可以在单元格数组中捕获这些元素。相当于
{a,b,c}


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

尝试用
(1:length(foldlist),1}
替换
(1:length(foldlist),1)
我刚刚尝试过,但没有成功。这是完全相同的错误消息。只是要弄清楚,
foldlist.name
是什么类型?你到底在说什么?折叠列表是一个结构。不确定foldlist.name(显然我的matlab/octave技能不是很好)。同样来自文档:“编程说明:deal通常用于从单元格数组或结构派生的逗号分隔列表。这是不必要的,因为解释器可以执行相同的操作,而无需函数调用的开销”精彩的解释+1.btw@MadPhysicist:事实上,
deal
被引入,不久之后,由于语法的改进而变得毫无用处。我想知道为什么他们还没有反对它。它最有用的地方是交换两个(或多个)值:
[a,b]=deal(b,a)
。但我也不需要那种语法。。。