Octave中的交易功能不起作用

Ame*_*ade 3 matlab octave

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

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

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

这是运行时出现的错误:

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

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

Cri*_*ngo 5

你应该能够做到这一点:

foldname={foldlist.name};
Run Code Online (Sandbox Code Playgroud)

这也是MATLAB中更好的方法.

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

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

  • 同样来自文档:"编程注意:处理通常与从单元格数组或结构派生的逗号分隔列表一起使用.这是不必要的,因为解释器可以执行相同的操作而无需函数调用的开销" (3认同)
  • @MadPhysicist:的确,引入了`deal`,不久后通过改进的语法变得毫无用处.我想知道为什么他们还没有弃用它.它有用的一个地方是交换两个(或更多)值:`[a,b] = deal(b,a)`.但是我从来没有需要那种语法...... (3认同)