Classdef: Difference between revisions
(removed fixed bug reports: #45351 (function handles),) |
No edit summary |
||
Line 1: | Line 1: | ||
=== Features that are not implemented === | |||
* '''enumeration''' | |||
* ''' | Octave should be able to parse the enumeration section of a classdef definition but nothing is done with it. Progress on this feature is tracked in bug report {{bug|44582}}. | ||
* '''events and listeners''' | |||
Octave should be able to parse the events section of a classdef definition but nothing is done with it. Progress on this feature is tracked in bug report {{bug|56194}}. | |||
* '''built-in class as superclass''' | |||
Octave does not allow subclassing built-in classes. In Matlab, classdef objects may subclass built-in integer, floating point, and logical types. For example, | |||
<source lang="octave"> | <source lang="octave"> | ||
classdef nonsense < uint32 | classdef nonsense < uint32 | ||
... | |||
end | end | ||
</source> | </source> | ||
does not work. | |||
Progress on this feature is tracked in bug report {{bug|44035}}. | |||
* '''concatenation of classdef objects''' | |||
Octave does not support concatenation of classdef objects to create classdef array objects. | |||
Example: | Example: | ||
<source lang="octave"> | <source lang="octave"> | ||
classdef MyClass < handle | classdef MyClass < handle | ||
Line 33: | Line 42: | ||
</source> | </source> | ||
Progress on this feature is tracked in bug report {{bug|44665}}. | |||
* ''' | * '''Saving and loading classdef objects''' | ||
Saving and loading classdef objects is not supported. | |||
Progress on this feature is tracked in bug report {{bug|45833}} | |||
=== Supported === | |||
* 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 | |||
| | |||
|} | |||
* 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. | |||
|- | |||
|Hidden | |||
|Yes | |||
| | |||
|- | |||
|NonCopyable | |||
|No | |||
|Property does not exist. | |||
|- | |||
|SetAccess | |||
|Partial | |||
| | |||
|- | |||
|SetObservable | |||
|No | |||
|Property exists but is not used. | |||
|- | |||
|Transient | |||
|No | |||
|Property exists but is not used. | |||
|} | |||
=== Open Bug Reports === | === Open Bug Reports === |
Revision as of 18:38, 22 April 2019
Features that are not implemented
- enumeration
Octave should be able to parse the enumeration section of a classdef definition but nothing is done with it. Progress on this feature is tracked in bug report #44582.
- events and listeners
Octave should be able to parse the events section of a classdef definition but nothing is done with it. Progress on this feature is tracked in bug report #56194.
- built-in class as superclass
Octave does not allow subclassing built-in classes. In Matlab, classdef objects may subclass built-in integer, floating point, and logical types. For example,
classdef nonsense < uint32
...
end
does not work.
Progress on this feature is tracked in bug report #44035.
- concatenation of classdef objects
Octave does not support concatenation of classdef objects to create classdef array objects.
Example:
classdef MyClass < handle
end
c = MyClass();
cc = [c, c]; % won't work
For now you can use a cell-array of objects instead:
cc = {c, c}; % ok
Progress on this feature is tracked in bug report #44665.
- Saving and loading classdef objects
Saving and loading classdef objects is not supported.
Progress on this feature is tracked in bug report #45833
Supported
- Methods
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 |
- Properties
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. |
Hidden | Yes | |
NonCopyable | No | Property does not exist. |
SetAccess | Partial | |
SetObservable | No | Property exists but is not used. |
Transient | No | Property exists but is not used. |
Open Bug Reports
Issues with basic classdef functionality
- 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.
- 51377 Parse error for abstract methods
- 44665 error in concatenation of classdef objects
- 44582 classdef: missing support for enumeration
- 48693 classdef subsref method is not called with correct nargout value
Classdef and +package directories
- 54941 interpreter cannot find methods in files of classdefs in packages
Arrays 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
I/O issues
- 45833 support load/save of classdef objects
Debugger
- 46451 unable to set breakpoints within classdef classes
- 45404 Breakpoints cannot be set in classdef methods or +package function files
Lower-priority issues
- 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
- 52614 setting properties of classdef object during construction with inheritance
- 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
- 44934 classdef parser prints extra newline when failing to parse bad classdef file
- 44643 classdef handle object can go into an recursive loop with isequal(obj1,obj2) if both are self-referential
- 44035 classdef is unable to to subclass double
Documentation
- 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