我有一个.m文件,在Matlab中运行时编写(并且工作),但是当我在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)
看起来很简单,鉴于错误解释,我只是不知道如何重写它。
答案 0 :(得分:5)
你应该可以这样做:
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
这也是MATLAB中更好的方法。
foldname={foldlist.name};
是以逗号分隔的值列表。通过在其周围放置花括号,将它们捕获在单元阵列中。相当于foldlist.name
。
原始代码的问题在于,在初始化{a,b,c}
之后,索引foldname={}
是非法的。当索引超出赋值左侧的边界时,MATLAB倾向于添加空单元格。 Octave也是如此,但是索引数组周围有方括号,似乎Octave没有以相同的方式解析这个特定的位。