MATLAB中的源代码树组织(#include)

时间:2014-10-14 06:30:47

标签: matlab include

假设我有很多源文件,我想在文件夹树结构中组织它们。

我是否可以拥有多个同名文件并在我需要的地方使用每一个文件,或者我必须拥有不同名称的所有函数和类?

在C ++中我有#include来介绍我需要的功能,这是什么?

只是为了说明:

.\main.m
.\Algorithms\QR\Factory.m    % function Factory
.\Algorithms\QR\Algorithm.m  % function Algorithm
.\Algorithms\SVD\Factory.m   % function Factory
.\Algorithms\SVD\Algorithm.m % function Algorithm

2 个答案:

答案 0 :(得分:5)

MATLAB支持namespaces。因此,在您的示例中,您将创建以下内容:

C:\some\path\main.m
C:\some\path\+algorithms\+qr\factor.m
C:\some\path\+algorithms\+svd\factor.m

(注意:只有顶级包文件夹的父文件夹必须位于MATLAB路径上,即:addpath('C:\some\path')

然后您可以使用其完全限定名称调用每个名称:

>> y = algorithms.qr.factor(x)

>> y = algorithms.svd.factor(x)

您也可以在某个范围内导入包。例如:

function y = main(x)
    import algorithms.svd.*;
    y = factor(x)
end

答案 1 :(得分:1)

要理解这个问题,我需要解释c ++源文件和头文件以及.m文件之间的一些区别。

首先:在matlab中,您只能运行在.m文件中定义最高的函数。此文件定义层次结构的顶部。然后子函数可以在同一个m文件中实现,但这些只能在同一个.m文件中使用。

其次:除此之外,matlab还搜索了特定文件名的包含路径,并假设文件中的函数具有相同的名称。如果使用除文件名之外的其他名称定义函数,则会通过警告通知此情况。这里的事情是,如果所有函数都是全局函数,则不能有2个具有相同名称的matlab函数。这与在c ++中有2个具有相同名称和相同名称空间的函数相同。

注意:matlab中的包含路径通常可以使用程序的to文件夹中的硬编码文件来完成。此函数使用matlab函数addpath

这是c / c ++的根本区别,其中允许在同一源文件中定义多个函数。然后,头文件通过提供函数定义来选择您在程序中实现的源代码。这里重要的是标题与函数名完全断开,它们不在matlab中。这意味着您的示例中的类比并不准确。你提出的建议是"包括" 2个具有相同名称的功能。这不可能是c / c ++(假设函数使用相同的命名空间或ar全局)或matlab中。

示例:如果标题topFolder / foo / bar.h和topFolder / baz / bar.h都包含函数void myDup(int a),并且两个标题都使用相同的命名空间(或者是全局的),那么这将生成错误。

但是,如果函数仅由有限数量的其他函数使用,则函数,例如, Factory.m,可以作为私有函数包含在不同的文件夹中。这也意味着只有这个文件夹才能访问它。如Amro's answer中所述,也可以使用matlab名称空间。