我正在尝试将一些用 Matlab 编写的代码转换为独立的、编译的 Matlab 应用程序。然而,在遇到一些奇怪的错误后,我意识到代码大量使用了从路径中添加和删除的操作,以避免多次使用多个具有相同名称(但结果/计算不同)的函数这一事实。环顾四周,我发现您可以通过在文件夹名称前面添加“+”来将文件夹转换为包,然后使用name_of_folder.name_of_function
检查并确保该包中的函数相互引用。 。这解决了命名空间问题,但它可能会产生大量工作,因为我现在必须遍历并将正确的包添加到每个函数调用中(并且我最终可能仍然需要复制大量文件)。
然后我看到了import
功能,我希望这能节省我一些时间。我想我可以将我想要的包传递给一两个特定的函数,让这些函数导入该包,然后事情就会按照我想要的方式工作——如果这些函数调用的函数落入该 import 语句的范围内。例如,如果我设置类似
function foo(var1, var2, ..., packagename)
eval(sprintf('import %s.*', packagename));
...
bar1(var1, var2);
...
bar2(var2);
...
那么我希望bar1
和bar2
将使用通过 import 语句导入的包。文档说条件和函数中的导入语句仅限于该代码块,但我不知道“该代码块”是否意味着仅文本,或者“该代码块”是代码和评估的所有内容因此。我有一种感觉是前者,但我想我会问,希望是后者。
那么,导入语句的范围是什么?或者,还有其他方法来解决这个问题吗?
最佳答案
对您来说最好的方法可能是承受重命名的痛苦,直到“多个函数同名”问题消失。它将使您和 future 的维护人员更容易理解代码。
两个选项与您的打包想法不同(我喜欢):
您只需将目录名称附加(或前置)到函数名称中,然后将它们全部放入一个新的(命名更好的)目录中。根据具体情况,可能更有意义。
如果您在目录
bar
和car
中定义了两个函数foo
,并且这两个函数采用相同的参数,您可以将它们统一在一个函数中,该函数将bar
或car
作为附加参数:function foo(parm1, parm2, parm3, version) if strcmp(version, 'bar') // bar code else // car code end
这不是很好,但它比修改路径要好得多,而且它有点遵循 MATLAB 模式(传入字符串参数来更改函数的详细行为)。即使两个 foo 函数具有不同的参数,您也可以完成这项工作,但您必须对参数进行烦人的解析,此时您的打包想法对我来说看起来更容易。
关于matlab - Matlab的导入函数的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13076365/