如何在MATLAB中模拟“包含”行为?

时间:2009-08-14 12:34:17

标签: matlab

在MATLAB中,我可以在一个文件中定义多个函数,只有第一个定义的函数在该文件外部可见。或者,我可以将每个函数放在自己的文件中,并通过路径使它们全局可见。我正在编写一个菜单驱动的应用程序,其中每个菜单项运行不同的功能。目前,这些都在一个大文件中,越来越难以导航。我想做的是将相关函数组放入单独的文件中。

我认为我可以通过将所有子函数放入一个单独的目录然后将目录添加到父函数中的路径来做这样的事情,但这感觉有点混乱和不优雅。

有人可以提出更好的建议吗?

注意:我最熟悉MATLAB 2006,但我正在升级到MATLAB 2009.

3 个答案:

答案 0 :(得分:16)

避免修改MATLAB path的一个建议是使用private function directory。例如:

假设您在目录test.m中有一个名为\MATLAB\temp\的函数(已在MATLAB路径中)。如果test.m中有本地函数要放在他们自己的m文件中,并且只希望test.m能够访问它们,那么首先要在\MATLAB\temp\中创建一个子目录叫private。然后,将test.m中的各个本地函数m文件放在此private子目录中。

private子目录不需要添加到MATLAB路径中(事实上,不应添加到路径中以使事情正常工作)。只有文件test.mprivate子目录正上方目录中的其他m文件才能访问它包含的函数。使用私有函数,您可以有效地模拟local functions的行为(即有限范围,函数重载等),而无需将所有函数放在同一个m文件中(对于某些应用程序来说可能会非常大)

答案 1 :(得分:5)

也许是这样的,

function foobar
    addpath C:\Include\ModuleX

    %% Script file residing in ModuleX
    some_func();
end

当然,在退出foobar后,ModuleX将保留在您的搜索路径中。如果要将其设置为默认路径而不重新启动,请添加以下行:

path(pathdef)

有关详细信息,请参阅ADDPATH

答案 2 :(得分:1)

您可以使用以“+”开头的子文件夹将函数分隔为名称空间。

例如:

将一个功能“bar”放在“+ foo”文件夹中

function bar()
print('hello world');

此功能可用作:

foo.bar() % prints hello world

可在此处找到更多信息:

What is the closest thing MATLAB has to namespaces?