在MATLAB中可以自我引用吗?

Tob*_*ler 23 matlab packages self-reference

如前所述这里,功能包,以及在类的静态方法,还是需要使用packagename.functionname的语法或import packagename.*每个功能(因为进口功能的工作空间的一部分,而不是全球).这意味着稍后更改包/类名可能会成为一个繁琐的麻烦.

有没有办法做类似的事情import this.*,即一个包/类名不可知的方法来访问同一个包/类中的所有函数/静态方法?

Ran*_*ndy 7

所以...这不需要导入也可以导入吗?或者是importt这是你在路上总是有的功能吗?

在每个函数的顶部粘贴一个"import this"块似乎并不复杂,然后你不必担心导入它在你的路径中.我倾向于认为对路径的依赖是危险的.

"导入此"块

%% Import own package
[~, pkgdir] = fileparts(fileparts(mfilename('fullpath')));
import([pkgdir(2:end) '.*']);
Run Code Online (Sandbox Code Playgroud)

你甚至可以把它放在一个try/catch块中,以确保它在一个包目录中,并决定如果不这样做该怎么做.

%% Import own package
try
    [~, pkgdir] = fileparts(fileparts(mfilename('fullpath'))); 
    import([pkgdir(2:end)'.*']);
catch err
    if ~strcmp(err.identifier,'MATLAB:UndefinedFunction'), rethrow(err); end
end
Run Code Online (Sandbox Code Playgroud)

  • 甚至对于嵌套包也是这样的:`mfiledir = fileparts(mfilename); pkg_pos = strfind(mfiledir,[filesep'+']); if~isempty(pkg_pos),import([strrep(mfiledir((pkg_pos(1)+2):end),[filesep'+'],'.')'.*']); end` (2认同)