Difference between revisions of "Classdef"
Jump to navigation
Jump to search
(→Lower-priority issues: Remove fixed entries.) |
|||
(38 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | + | === Supported Features === | |
− | === | + | ==== Properties ==== |
− | + | Classdef properties are supported but not all attributes are implemented. | |
− | + | {| class="wikitable" | |
+ | |- | ||
+ | ! style="text-align:left;"| Attribute | ||
+ | ! Support | ||
+ | ! Notes | ||
+ | |- | ||
+ | |AbortSet | ||
+ | |No | ||
+ | |Property does not exist. | ||
+ | |- | ||
+ | |Abstract | ||
+ | |Yes | ||
+ | | | ||
+ | |- | ||
+ | |Access | ||
+ | |Partial | ||
+ | | | ||
+ | |- | ||
+ | |Constant | ||
+ | |Yes | ||
+ | | | ||
+ | |- | ||
+ | |Dependent | ||
+ | |Partial | ||
+ | | | ||
+ | |- | ||
+ | |GetAccess | ||
+ | |Partial | ||
+ | | | ||
+ | |- | ||
+ | |GetObservable | ||
+ | |No | ||
+ | |Property exists but is not used. Requires events and listeners to be implemented in order to work properly. | ||
+ | |- | ||
+ | |Hidden | ||
+ | |Yes | ||
+ | | | ||
+ | |- | ||
+ | |NonCopyable | ||
+ | |No | ||
+ | |Property does not exist. | ||
+ | |- | ||
+ | |SetAccess | ||
+ | |Partial | ||
+ | | | ||
+ | |- | ||
+ | |SetObservable | ||
+ | |No | ||
+ | |Property exists but is not used. Requires events and listeners to be implemented in order to work properly. | ||
+ | |- | ||
+ | |Transient | ||
+ | |No | ||
+ | |Property exists but is not used. | ||
+ | |} | ||
+ | ==== Methods ==== | ||
− | + | Classdef methods are supported but not all attributes are fully implemented. | |
− | |||
− | |||
− | + | {| class="wikitable" | |
− | + | |- | |
+ | ! style="text-align:left;"| Attribute | ||
+ | ! Support | ||
+ | ! Notes | ||
+ | |- | ||
+ | |Abstract | ||
+ | |Partial | ||
+ | |See bug report {{bug|51377}} | ||
+ | |- | ||
+ | |Access | ||
+ | |Yes | ||
+ | | | ||
+ | |- | ||
+ | |Hidden | ||
+ | |Yes | ||
+ | | | ||
+ | |- | ||
+ | |Sealed | ||
+ | |Yes | ||
+ | | | ||
+ | |- | ||
+ | |Static | ||
+ | |Yes | ||
+ | | | ||
+ | |} | ||
+ | === Features that are not implemented === | ||
− | + | ==== [https://www.mathworks.com/help/matlab/enumeration-classes.html enumeration] ==== | |
− | + | * {{bug|44582}} Parse the enumeration section of a classdef definition but nothing is done with it. | |
− | |||
− | classdef | ||
− | |||
− | + | ==== [https://www.mathworks.com/help/matlab/matlab_oop/learning-to-use-events-and-listeners.html events and listeners] ==== | |
− | |||
− | |||
− | + | * {{bug|56194}} Parse the events section of a classdef definition but nothing is done with it. | |
− | |||
− | |||
− | |||
+ | ==== [https://www.mathworks.com/help/matlab/matlab_oop/property-validator-functions.html Property Validation Functions] ==== | ||
− | + | === Open Bug Reports for Other Issues === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==== Issues with basic classdef functionality ==== | |
+ | * {{bug|51659}} Calling 'methods' on self causes syntax error | ||
+ | * {{bug|48682}} print_usage fails within classdef block | ||
+ | * {{bug|49434}} which returns "built-in function" for classdef m-file | ||
+ | * {{bug|48041}} classdef: `help myclass` messes up `help @myclass/method` | ||
+ | * {{bug|43047}} help() does not see classdef files | ||
+ | * {{bug|42620}} exist() does not use "class" argument | ||
+ | * {{bug|53874}} doc_cache_create doesnt handle classdef documentation | ||
+ | * {{bug|52096}} meta.class.fromName throws error when class name not found. | ||
+ | * {{bug|48693}} classdef subsref method is not called with correct nargout value | ||
+ | * {{bug|56006}} Object indexing: obj(1).property(end+1:n) - end is interpreted wrong | ||
+ | * {{bug|55983}} 'x(ix) = []' deletion syntax does not work for objects | ||
+ | * {{bug|55976}} cat, repmat, and reshape don't work for classdef objects | ||
+ | * {{bug|55961}} properties function does not preserve order | ||
+ | * {{bug|52582}} using static method to initialize property value fails | ||
+ | * {{bug|45833}} support load/save of classdef objects | ||
− | + | ==== Classdef and +package directories ==== | |
− | |||
− | |||
− | |||
− | + | * [https://savannah.gnu.org/bugs/?54941 54941] interpreter cannot find methods in files of classdefs in packages | |
− | |||
− | |||
− | + | ==== Arrays of classdef objects ==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | * {{bug|44665}} error in concatenation of classdef objects | |
− | + | * {{bug|53906}} Cannot make an object array with square brackets | |
− | + | * {{bug|47755}} Access to object arrays | |
− | + | * {{bug|47241}} classdef: assigning property of handle object in object array constructs new object | |
− | |||
− | |||
− | |||
− | + | ==== Debugger (fixes for these are in progress) ==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | * {{bug|46451}} unable to set breakpoints within classdef classes | ||
+ | * {{bug|45404}} Breakpoints cannot be set in classdef methods or +package function files | ||
− | + | ==== Lower-priority issues ==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | function | + | * {{bug|55488}} Invalid use of colon char as classdef function's argument when subsref is overwritten |
− | + | * {{bug|54966}} Error when assigning array to an object implementing subsasgn() subscripted using "{}" | |
− | + | * {{bug|54028}} copy of non-handle class instance is not deep | |
− | + | * {{bug|53811}} cellfun does not find overloaded function with function name argument | |
+ | * {{bug|52989}} classdef: missing error messages on multiply defined properties | ||
+ | * {{bug|52582}} Dependent constant properties in classdef errors: no such file | ||
+ | * {{bug|52123}} Indirect memory leak in cdef_manager::initialize () | ||
+ | * {{bug|51285}} max_recursion_depth error in classdef constructor | ||
+ | * {{bug|50395}} subclassing a class that is also defined as a variable fails | ||
+ | * {{bug|50011}} failure to report error on conflicting methods for classdef | ||
+ | * {{bug|49379}} classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1) | ||
+ | * {{bug|55810}} sizeof() and whos() returns 0 bytes for classdef objects | ||
+ | * {{bug|45893}} classdef properties are not reloaded when file is updated | ||
+ | * {{bug|44643}} classdef handle object can go into an recursive loop with isequal(obj1,obj2) if both are self-referential | ||
+ | * {{bug|55755}} mxGetProperty does not work with properties marked as Dependent | ||
+ | * {{bug|55767}} classdef property should not be the same as classdef name (at least for Matlab compatibility) | ||
+ | * {{bug|44035}} unable to subclass built-in types | ||
− | + | ==== Documentation ==== | |
− | + | * {{bug|50729}} Improve OOP documentation | |
− | + | * {{bug|47908}} Octave:classdef-to-struct not documented in warning_ids.m | |
− | + | * {{bug|44590}} More documentation for the current status of classdef implementation | |
− | |||
− | + | === Classdef examples in Octave === | |
− | + | * [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/miscellaneous/inputParser.m inputParser.m] | |
+ | * [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/web/weboptions.m weboptions.m] | ||
+ | * [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/%2Bcontainers/Map.m +containers/Map.m] | ||
− | + | [[Category:Development]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 19:04, 11 November 2020
Supported Features[edit]
Properties[edit]
Classdef properties are supported but not all attributes are implemented.
Attribute | Support | Notes |
---|---|---|
AbortSet | No | Property does not exist. |
Abstract | Yes | |
Access | Partial | |
Constant | Yes | |
Dependent | Partial | |
GetAccess | Partial | |
GetObservable | No | Property exists but is not used. Requires events and listeners to be implemented in order to work properly. |
Hidden | Yes | |
NonCopyable | No | Property does not exist. |
SetAccess | Partial | |
SetObservable | No | Property exists but is not used. Requires events and listeners to be implemented in order to work properly. |
Transient | No | Property exists but is not used. |
Methods[edit]
Classdef methods are supported but not all attributes are fully implemented.
Attribute | Support | Notes |
---|---|---|
Abstract | Partial | See bug report #51377 |
Access | Yes | |
Hidden | Yes | |
Sealed | Yes | |
Static | Yes |
Features that are not implemented[edit]
enumeration[edit]
- #44582 Parse the enumeration section of a classdef definition but nothing is done with it.
events and listeners[edit]
- #56194 Parse the events section of a classdef definition but nothing is done with it.
Property Validation Functions[edit]
Open Bug Reports for Other Issues[edit]
Issues with basic classdef functionality[edit]
- #51659 Calling 'methods' on self causes syntax error
- #48682 print_usage fails within classdef block
- #49434 which returns "built-in function" for classdef m-file
- #48041 classdef: `help myclass` messes up `help @myclass/method`
- #43047 help() does not see classdef files
- #42620 exist() does not use "class" argument
- #53874 doc_cache_create doesnt handle classdef documentation
- #52096 meta.class.fromName throws error when class name not found.
- #48693 classdef subsref method is not called with correct nargout value
- #56006 Object indexing: obj(1).property(end+1:n) - end is interpreted wrong
- #55983 'x(ix) = []' deletion syntax does not work for objects
- #55976 cat, repmat, and reshape don't work for classdef objects
- #55961 properties function does not preserve order
- #52582 using static method to initialize property value fails
- #45833 support load/save of classdef objects
Classdef and +package directories[edit]
- 54941 interpreter cannot find methods in files of classdefs in packages
Arrays of classdef objects[edit]
- #44665 error in concatenation of classdef objects
- #53906 Cannot make an object array with square brackets
- #47755 Access to object arrays
- #47241 classdef: assigning property of handle object in object array constructs new object
Debugger (fixes for these are in progress)[edit]
- #46451 unable to set breakpoints within classdef classes
- #45404 Breakpoints cannot be set in classdef methods or +package function files
Lower-priority issues[edit]
- #55488 Invalid use of colon char as classdef function's argument when subsref is overwritten
- #54966 Error when assigning array to an object implementing subsasgn() subscripted using "{}"
- #54028 copy of non-handle class instance is not deep
- #53811 cellfun does not find overloaded function with function name argument
- #52989 classdef: missing error messages on multiply defined properties
- #52582 Dependent constant properties in classdef errors: no such file
- #52123 Indirect memory leak in cdef_manager::initialize ()
- #51285 max_recursion_depth error in classdef constructor
- #50395 subclassing a class that is also defined as a variable fails
- #50011 failure to report error on conflicting methods for classdef
- #49379 classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1)
- #55810 sizeof() and whos() returns 0 bytes for classdef objects
- #45893 classdef properties are not reloaded when file is updated
- #44643 classdef handle object can go into an recursive loop with isequal(obj1,obj2) if both are self-referential
- #55755 mxGetProperty does not work with properties marked as Dependent
- #55767 classdef property should not be the same as classdef name (at least for Matlab compatibility)
- #44035 unable to subclass built-in types
Documentation[edit]
- #50729 Improve OOP documentation
- #47908 Octave:classdef-to-struct not documented in warning_ids.m
- #44590 More documentation for the current status of classdef implementation