我的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
的属性。
答案 0 :(得分:1)
你确定你有" RootFolder"添加在路径上?这是我做的一个快速测试,它运行得很好(我正在运行R2013a):
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"属性一样) )