【问题标题】:Restrict MATLAB to call functions from same folder as running file限制 MATLAB 调用与运行文件相同的文件夹中的函数
【发布时间】:2014-10-17 05:32:23
【问题描述】:

我正在编写一个脚本(我们称之为 main.m),它调用我编写的一个函数(我们称之为 myfunc.m)。看来我在我的 MATLAB 路径上的不同位置有一些 myfunc.m 函数。

在查找自定义函数时,我想以某种方式限制 matlab 仅在我的 main.m 类所在的同一文件夹中查找。

例如,如果我在

C:\example\main.m
C:\example\myfunc.m

C:\asd\main.m
C:\asd\myfunc.m

我在文件夹example中打开main.m,当调用myfunc.m时,它只能调用文件夹C:\example\中的函数。如果我在文件夹 C:\asd\ 中运行 main.m 也是如此。

我希望这是有道理的,谢谢。

【问题讨论】:

  • 为什么不使用正常路径而不包括不必要的文件夹?
  • 嗨,目前这是不可能的,因为我需要针对不同代码的同一个函数文件的不同版本(我知道这很傻,但我现在就是这样做的),因此我想要一个根据具体情况选择文件的方法。
  • 然后创建一个函数,它将根据您需要的函数版本更新您的路径。当你需要从另一个文件夹调用函数时,更新路径,函数将从那里被调用。

标签: matlab function


【解决方案1】:

在短期内,一个相当快速的解决方案是让您将myfunc.m 文件变成私有 函数,这些函数在优先级方面优于常规函数,并且只能被调用按同一父文件夹中的函数。

只需将您的 myfunc.m 文件放在名为 private 的文件夹中:

C:\example\main.m
C:\example\private\myfunc.m

C:\asd\main.m
C:\asd\private\myfunc.m

现在example\private\myfunc.m 只能被文件夹example 中的事物调用,而\asd\private\myfunc.m 只能被文件夹asd 中的事物调用。此外,它们的优先级高于其他函数,因此您可以确保始终调用正确的函数。

从长远来看,您可能会受益于 MATLAB 提供的用于管理命名空间冲突的其他一些更广泛的方法,例如子函数、面向对象编程和包。

子函数非常容易掌握。包一点也不复杂,但需要考虑一下如何组织代码(这通常是值得的)。 OO 编程是典型编程风格的一个更大的变化,但对于更大的应用程序来说是非常必要的。

【讨论】:

  • 谢谢,不知道私人文件夹选项。我会阅读一下你提到的其他几点。
猜你喜欢
  • 1970-01-01
  • 2017-10-28
  • 2011-09-03
  • 1970-01-01
  • 2016-05-13
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多