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/