如何实现“可导入的命名空间”?

时间:2014-04-05 13:12:58

标签: matlab

我知道我可以使用一个仅由静态方法组成的类来在MATLAB中实现名称空间。 E.g。

classdef MyNamespace
    methods (Static = true)
        function [...] = foo(...)
            ...
        end
        function [...] = bar(...)
            ...
        end
        ...
    end
end

通过上面我可以调用函数MyNamespace.fooMyNamespace.bar等(当然,假设文件MyNamespace.m在我的搜索路径中,或者在当前目录中)

这种技术的一个重要特征是它允许模拟“命名空间变量”。例如,methods (Static = true)中的函数可以具有

形式
        function out = BAZ(newval)
            persistent val;
            out = val;
            if nargin > 0, val = newval; end
        end

有了这个,方法 MyNamespace.BAZ可以模仿“命名空间变量MyNamespace.BAZ(但是,诚然,在非常繁琐的方式)。

此功能是我绝对需要的功能

上面描述的命名空间的实现是可以的,但是我希望能够 import 命名空间,这样我就可以使用他们的“短”(又名“不合格”)名称来调用他们的函数,例如foobar

在上述意义上,如何实现可以导入的命名空间?


顺便说一句,我更喜欢基于上述技术(用于实现名称空间)的答案,因为这是我有一些经验的技术,但我也对不基于这种技术的替代方案持开放态度。< / p>

1 个答案:

答案 0 :(得分:1)

MATLAB有一个package系统,允许创建一个可导入的函数命名空间。简而言之,只需将名称以+开头的目录放在路径上的另一个目录中,然后在该目录中添加函数MATLAB文件。如果目录MyNamespace.m中有someDir,则只需创建:

someDir/+MyNamespace/foo.m
someDir/+MyNamespace/bar.m

等等。您可以通过MyNamespace.foo, MyNamespace.barimport来呼叫他们:

import MyNamespace.foo

或:

import MyNamespace.*