2

我的 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

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

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

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

编辑:

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

4

1 回答 1

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

所以我什至能够直接索引到返回的结构。

请注意,如果要引用其他属性中的任何常量属性,则必须使用包含包名称的完全限定名称(就像我们为结构中的“版本”属性所做的那样)

于 2013-06-11T16:18:49.320 回答