如何创建具有包文件夹结构中其他类可访问的常量属性的类?

时间:2013-06-11 15:46:03

标签: matlab oop packages

我的MatLab项目包有以下文件结构:

RootFolder
    +CustomUiElements
        Styles.m
        ...
    ...
    +DetailView
        Controller.m
        ...
    MainApp.m

Controller.m文件中,我在访问类文件Styles.m时遇到问题,该文件只是一个数据类,其属性是属性结构,可用作我的ui元素的“样式”:

classdef Styles
    %STYLES A collection of structures used to unify the styling of the
    %   application.  

    properties (Constant = true)
        FontName = 'Helvetica';
        FontSizes = struct('Title', 16, 'SubTitle', 14, 'BodyTitle', 12, 'Body', 10);
        TabSizes = struct('Title', 260, 'LrgSubTitle', 120, 'SmlSubTitle', 75);
        PaddingSizes = struct('None', 0, 'Small', 2, 'Med', 5, 'Large', 10);

        LargeTabStyle = struct('FontName', Styles.FontName, ...
            'FontSize', Styles.FontSizes.Title, 'FontWeight', 'demi', ...
            'TabSize', Styles.TabSizes.Title);

... % and so forth

但是每当我尝试调用class属性时,即使是从控制台,我也会收到以下错误:

>> CustomUiElements.Styles.LargeTabStyle
Undefined variable "Styles" or class "Styles.FontName".

由于我甚至没有尝试访问道具FontName,这使我相信这是构建类Styles的obj的问题。在切换到“非打包”文件夹结构之前,我没有任何错误。如何创建具有常量道具的类,并且可以使用包文件夹结构访问该类。

修改

我能够访问和使用该文件夹中的其他类文件(CustomUiElements)。但是,它们具有自定义构造函数,方法和属性,Styles仅具有Constant的属性。

1 个答案:

答案 0 :(得分:1)

你确定你有" RootFolder"添加在路径上?这是我做的一个快速测试,它运行得很好(我正在运行R2013a):

根/ + PKG / MyClass.m

classdef MyClass
    properties (Constant)
        Version = '1.0';
        Info = struct('Name','MyClass', 'Version',pkg.MyClass.Version);
    end
end

现在

>> addpath('/path/to/root')
>> pkg.MyClass.Version
ans =
1.0
>> pkg.MyClass.Info.Version
ans =
1.0

所以我甚至可以直接索引返回的结构。

请注意,如果要引用其他属性中的任何常量属性,则必须使用包含包名称的完全限定名称(就像我们在结构中使用" Version"属性一样) )