matlab - Matlab中的隐藏类类似于私有(private)函数

标签 matlab class private

Private functions在Matlab中,函数存储在名为“private”的文件夹中,并且它们仅可供该文件夹正上方的函数使用。

我在类(class)中尝试了相同的方法,但 Matlab 2016b 拒绝了

A class definition may not be in or below a private directory.

我正在编写一个工具箱,我希望一些内部类在 Matlab 本身中不可见,例如它们不应出现在搜索路径中,类似于 Java 中类的私有(private)行为或 Matlab 中私有(private)函数的行为。

有没有办法,如果有的话,该怎么做?

最佳答案

在 MATLAB 中无法将类设为私有(private)。不过,您可以做的是将其放置在子包中,因此它将放置在与包的其余部分不同的命名空间中。

+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 在评论中提到的,您还可以将构造函数放在方法 block 中,其 Access restricted to members of the class 。您需要指定您希望被授予访问权限的每个类

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

关于matlab - Matlab中的隐藏类类似于私有(private)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43324438/

相关文章:

c++ - 如何使用 Matlab 函数 ordfilt2 到 C++ 和 OpenCV

html - 在新的 DIV HTML 标签中导入现有的 CSS 类

c++ - 有没有办法使类递归?

java - Jsp类不可见

c++ - 避免通过操作从私有(private)构造函数间接实例化

java - 为什么可以从不同的实例访问 "private"方法?

matlab - 如何将数字结果转换为符号或字符串?

matlab - 删除重复条目——matlab 中的变体

image - 检查邻域中的像素值

java - 为什么 java.io.Bits 不公开?