【问题标题】:How to call an m file directly from another m file in MATLAB without add its folder path如何在MATLAB中直接从另一个m文件调用一个m文件而不添加其文件夹路径
【发布时间】:2016-02-02 20:36:27
【问题描述】:

如何在 MATLAB 中从另一个 m 文件调用一个 m 文件而不添加其文件夹路径? 我不想通过

添加它的文件夹
addpath(genpath(''))

【问题讨论】:

  • 你能给出一个不想添加路径的充分理由吗? - 您的替代方法是将 .m 文件复制并粘贴到您的工作目录(这有点傻)。
  • 我想要一个包含多个 .m 文件的文件夹。我不想在我的主要功能中使用该文件夹中的另一个 m 文件。由于重复,我也不能使用副本。
  • 好吧,正如@GameOfThrows 所说,调用 .m 文件有两种选择:将文件复制到当前工作目录使用addpath。据我所知,没有其他选择可以做到这一点,即使调用文件的fullpath 然后尝试evalfeval 也不起作用。
  • 这就是工作目录的想法吧?你可以在说 file:///home/project/ 中有你的主要功能;以及您在 file:///home/project/functions 中的功能代码?
  • @Daniel 是的,但这是完成他所要求的唯一方法。如果他想调用一个特定的文件,那么他可以编写一个小包装函数,传递完整路径和任何输入,调用该函数,然后返回上一个目录。这就是run 所做的一切(减去输入,因为它只是脚本)。

标签: matlab


【解决方案1】:

类似于 MATLAB 内置的run 用于脚本的功能,您可以将cd 放入辅助路径,执行您的函数,然后返回上一个目录。

一个小例子:

% testcode.m
function [output] = testcode(fullfunctionpath, A, B)
[pathname, functionName] = fileparts(fullfunctionpath);
olddir = cd(pathname);

output = feval(functionName, A, B);
cd(olddir);
end

% .\test\testing.m
function [output] = testing(A, B)
output = A + B;
end

随叫随到:

C = testcode('C:\testcode-matlab\test\testing.m', 1, 2);

会回来

C =

     3

请注意,这种方法没有错误处理,也不会检查路径定义中已经存在的重复项。如果目标文件夹中不存在被调用函数,但路径中存在,则仍会执行 MATLAB 路径中的函数。请参阅:Function Precedence Order 了解更多信息。

【讨论】:

    【解决方案2】:

    函数的所有可见性规则都基于文件夹。如果您想拥有不同的可见性,您必须将您的函数放在不同的文件夹中。

    通常,避免重复的函数名称并将所有源文件添加到您的搜索路径是可行的。为避免重复的函数名称,您可能需要查看包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      相关资源
      最近更新 更多