matlab - Matlab的导入函数的范围是什么?

标签 matlab matlab-deployment

我正在尝试将一些用 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);
  ...

那么我希望bar1bar2将使用通过 import 语句导入的包。文档说条件和函数中的导入语句仅限于该代码块,但我不知道“该代码块”是否意味着仅文本,或者“该代码块”是代码和评估的所有内容因此。我有一种感觉是前者,但我想我会问,希望是后者。

那么,导入语句的范围是什么?或者,还有其他方法来解决这个问题吗?

最佳答案

对您来说最好的方法可能是承受重命名的痛苦,直到“多个函数同名”问题消失。它将使您和 future 的维护人员更容易理解代码。

两个选项与您的打包想法不同(我喜欢):

  1. 您只需将目录名称附加(或前置)到函数名称中,然后将它们全部放入一个新的(命名更好的)目录中。根据具体情况,可能更有意义。

  2. 如果您在目录 barcar 中定义了两个函数 foo,并且这两个函数采用相同的参数,您可以将它们统一在一个函数中,该函数将 barcar 作为附加参数:

    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/

相关文章:

regex - MATLAB 中的多个捕获组

performance - Matlab:数组在循环内增长 - 那又怎样?

matlab - 从 3d 张量乘以 2d 矩阵

matlab - 确定文件是否在 matlab 中编译(在 exe' 中)

c - 由于 dll 中的 #define 宏导致数据类型错误

matlab - Matlab 中基于傅里叶的字符识别

java - 缩放函数/方法的参数/输入数量

java - 无法通过 Java 在 MATLAB 中加载 DLL

c - 如何将结构从 Matlab 代码转换为 C 代码(使用 Matlab 编译器)

java - 使用 Matlab Builder JA 时遇到的问题