Matlab提供了通过关键字在方法块中声明方法类型的可能性。
UnitTestingFramework使用了这个(Example):
methods(TestMethodSetup)
function createFigure(testCase)
% comment
testCase.TestFigure = figure;
end
end
我正在搜索methods(
和)
之间允许出现的关键字的完整列表。
我想知道这一点,能够为Spinx-Contrib Matlab域中的issue做出贡献。
答案 0 :(得分:2)
对于常规课程,您可以记录以下attributes for classes:
Abstract
AllowedSubclasses
ConstructOnLoad
HandleCompatible
Hidden
InferiorClasses
Sealed
for methods:
Abstract
Access
Hidden
Sealed
Static
for properties:
AbortSet
Abstract
Access
Constant
Dependent
GetAccess
GetObservable
Hidden
SetAccess
SetObservable
Transient
和events:
Hidden
ListenAccess
NotifyAccess
但也有一些undocumented attributes - for example以上任何一项也可以包含Description
和DetailedDescription
属性。这些在MATLAB编辑器中被标记为未知属性,但是完全可用(并且被许多内置类(如containers.Map
)使用),编辑器标志可以用%#ok<ATUNK>
来抑制。我经常使用它们来组合相关的方法/属性等。
类matlab.unittest.TestCase
添加了类属性:
SharedTestFixtures
方法属性:
Test
TestMethodsetup
TestMethodTeardown
TestClassSetup
TestClassTeardown
ParameterCombination
和属性属性:
ClassSetupParameter
MethodSetupParameter
TestParameter
您没有提及对它们的兴趣,但如果您为Sphinx做出贡献,您可能还想添加对System Objects的支持,这会添加属性属性:
Nontunable
Logical
PositiveInteger
DiscreteState
现在可能还有更多,而且我现在还没有注意到更多的无证attributes。
答案 1 :(得分:2)
请注意,这些属性实际上只是元类,元属性,元方法等的属性。观察您可以看到给定方法(等)块的有效属性列表,如下所示:
>> cls = ?matlab.unittest.TestCase
cls =
class with properties:
SharedTestFixtures: {}
TestTags: {}
Name: 'matlab.unittest.TestCase'
Description: 'Class which defines test cases in the MATLAB Unit Test Framework.'
DetailedDescription: ''
Hidden: 0
Sealed: 0
Abstract: 1
Enumeration: 0
ConstructOnLoad: 1
HandleCompatible: 1
InferiorClasses: {0x1 cell}
ContainingPackage: [1x1 meta.package]
PropertyList: [2x1 meta.property]
MethodList: [133x1 meta.method]
EventList: [11x1 meta.event]
EnumerationMemberList: [0x1 meta.EnumeratedValue]
SuperclassList: [1x1 meta.class]
>> class(cls)
ans =
matlab.unittest.meta.class
>> method = cls.MethodList.findobj('Name', 'TestCase')
method =
method with properties:
Test: 0
TestMethodSetup: 0
TestMethodTeardown: 0
TestClassSetup: 0
TestClassTeardown: 0
ParameterCombination: ''
TestTags: {}
Name: 'TestCase'
Description: ''
DetailedDescription: ''
Access: 'protected'
Static: 0
Abstract: 0
Sealed: 0
Hidden: 0
InputNames: {0x1 cell}
OutputNames: {'lhs1'}
DefiningClass: [1x1 matlab.unittest.meta.class]
>> class(method)
ans =
matlab.unittest.meta.method
>>
您可以看到这些具有额外属性的类实际上是新的元类,它们是标准元类的子类。那就是matlab.unittest.meta.class是meta.class的子类,matlab.unittest.meta.method是meta.method的子类。