我试图构建自己的MATLAB版本dir
函数。我目前的代码(下面)几乎可以工作,但我无法解析某些输入组合。函数'varargin'只给出名称 - 值对时给出错误:MATLAB
我想它做的是这样的:
- 不要列出隐藏的文件夹。
- 有一个布尔参数(默认为false)仅返回目录名称而不返回文件。
- 有一个可选字段作为文件夹的路径(默认为当前目录)。
更清晰,我想创建功能dir2
它能够处理这些组合:
dir2
这应该列出当前目录每一个不隐藏文件或文件夹dir2('path_to_directory')
这应该列出指定目录中的每个非隐藏文件或文件夹dir2('OnlyDirectories', true)
这应该只列出未隐藏的文件夹在当前目录dir2('path_to_directory', 'OnlyDirectories', true)
这应该只列出在指定目录
我现在的版本是不是隐藏的文件夹这个:
function list = dir2(varargin)
p = inputParser;
addOptional(p, 'name', '.', @ischar);
addParameter(p, 'OnlyDirectories', false, @islogical);
parse(p, varargin{:});
list = dir(p.Results.name);
if p.Results.OnlyDirectories
dirFlags = [list.isdir];
list = list(dirFlags); % Keeping only directories
end
% Deleting hidden folders from the list
list = list(arrayfun(@(x) ~strcmp(x.name(1),'.'), list));
end
这工作正常的情况下s , and 但它不适用于案件。在这种情况下,它给我的错误:
Expected a string scalar or character vector for the parameter name, instead the input type was 'logical'.
我想我可能会丢失关于MATLAB输入一些小事解析,但我想不出什么。
,而不是假设的东西,我想你可以检查它并相应采取行动。例如:1.检查你是否有2个参数(就像你现在做的那样)2.检查参数是否真的是你期望的3.要么处理它,要么明确地抛出相关的错误。 –
是的,或者遍历所有'varargin'成员并根据其他标准分配变量。虽然正如我注意到的那样,无论如何,解决方案有点怪异,进一步的检查类似于将更多的磁带放在泄漏的管道上,而不是使用更好的管道! – Wolfie