假设我有很多源文件,我想在文件夹树结构中组织它们。
我是否可以拥有多个同名文件并在我需要的地方使用每一个文件,或者我必须拥有不同名称的所有函数和类?
在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
答案 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名称空间。