在Matlab中隐藏类似于私有函数的类

时间:2017-04-10 13:25:25

标签: matlab class private

Matlab中的

Private functions是存储在名称为" private"的文件夹中的函数。它们仅适用于此文件夹上方的功能。

我尝试了相同的课程,但Matlab 2016b拒绝

  

类定义可能不在私有目录中或下面。

我正在编写工具箱,我希望在Matlab中看不到某些内部类,例如:它们不应出现在搜索路径中,类似于Java中私有行为的行为或Matlab中私有函数的行为方式。

有没有办法,如果有,怎么办呢?

1 个答案:

答案 0 :(得分:2)

在MATLAB中无法使类成为私有。但你可以做的是将它放在一个子包中,因此它将放在与你包的其余部分分开的命名空间中。

+mypackage
    +internal
        myclass.m

如果要删除为所有需要访问类的内部函数键入internal的要求,可以在private文件夹中添加包装函数

<强> +mypackage/private/myclass.m

function obj = myclass(varargin)
    obj = mypackage.internal.myclass(varargin{:});
end

如果你真的想限制你的包之外的任何东西使用你可以在构造函数中放置一些逻辑,以确保调用类是你的包的成员

classdef myclass < handle
    methods
        function self = myclass()
            % Get the path to the package folder
            directory = fileparts(fileparts(mfilename('fullpath')));

            % Ensure that the function/class that called this was part of te toolbox
            S = dbstack('-completenames');
            assert(numel(S) > 1 && strfind(S(2).file, directory), ...
                'Class only able to be called from the toolbox')
        end
    end
end

<强>更新

正如@SamRoberts在评论中所提到的,您也可以将构造函数放在方法块中Access restricted to members of the class。您需要指定您希望被授予访问权限的每个类

classdef myclass
    methods (Access = {?mypackage.Class1, ?mypackage.Class2})
        function self = myclass()
            % Constructor
        end
    end
end