Latest revision |
Your text |
Line 1: |
Line 1: |
| === Supported Features ===
| | This page is a stub. We should begin documenting what classdef is implemented and what is not. |
|
| |
|
| ==== Properties ==== | | ==== not supported ==== |
|
| |
|
| Classdef properties are supported but not all attributes are implemented.
| | * enumeration |
|
| |
|
| {| class="wikitable"
| | * build-in class as superclass |
| |-
| | ** <source lang="octave" enclose="none">classdef nonsense < uint32</source> |
| ! 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 ==== | | * [http://www.mathworks.com/help/matlab/matlab_oop/redefining-concatenation-for-your-class.html concatenating objects] into [http://www.mathworks.com/help/matlab/matlab_oop/initialize-object-arrays.html array of objects]. Example: |
| | <source lang="octave"> |
| | classdef MyClass < handle |
| | end |
|
| |
|
| Classdef methods are supported but not all attributes are fully implemented.
| | c = MyClass(); |
| | cc = [c, c]; % won't work |
| | </source> |
|
| |
|
| {| class="wikitable"
| | For now you can use a cell-array of objects instead: |
| |-
| | <source lang="octave"> |
| ! style="text-align:left;"| Attribute
| | cc = {c, c}; % ok |
| ! Support
| | </source> |
| ! Notes
| |
| |-
| |
| |Abstract
| |
| |Partial
| |
| |See bug report {{bug|51377}}
| |
| |-
| |
| |Access
| |
| |Yes
| |
| |
| |
| |-
| |
| |Hidden
| |
| |Yes
| |
| |
| |
| |-
| |
| |Sealed
| |
| |Yes
| |
| |
| |
| |-
| |
| |Static
| |
| |Yes
| |
| |
| |
| |}
| |
|
| |
|
| === Features that are not implemented === | | * [http://www.mathworks.com/help/matlab/matlab_oop/mutable-and-immutable-properties.html Immutable property] set access. Example: |
| | <source lang="octave"> |
| | classdef MyClass < handle |
| | properties (SetAccess = immutable) |
| | x |
| | end |
| | methods |
| | function obj = MyClass() |
| | x = rand(); |
| | end |
| | end |
| | end |
| | </source> |
|
| |
|
| ==== [https://www.mathworks.com/help/matlab/enumeration-classes.html enumeration] ====
| | Use "private" properties as workaround. |
|
| |
|
| * {{bug|44582}} Parse the enumeration section of a classdef definition but nothing is done with it. | | * Function handles to package methods and static class methods. |
| | For example if we have <code>+mypackage/myfunc.m</code>, creating a function handle as <code>fh = @mypackage.myfunc</code> won't work. |
| | As a workaround, we can create an indirection using an anonymous function <code>fh = @(varargin) mypackage.myfunc(varargin{:})</code>. |
| | Similarly for static class methods where <code>fh = @MyClass.myfunc</code> isn't yet supported. |
|
| |
|
| ==== [https://www.mathworks.com/help/matlab/matlab_oop/learning-to-use-events-and-listeners.html events and listeners] ====
| | * Defining [http://www.mathworks.com/help/matlab/matlab_oop/specifying-methods-and-functions.html#br2la89 local functions] in the same classdef-file is not working. For example, the following code gives a syntax/parse error: |
| | <source lang="octave"> |
| | classdef MyClass |
| | methods |
| | function obj = MyClass() |
| | myfunc() |
| | end |
| | end |
| | end |
|
| |
|
| * {{bug|56194}} Parse the events section of a classdef definition but nothing is done with it.
| | function myfunc() |
| | disp('myfunc') |
| | end |
| | </source> |
|
| |
|
| ==== [https://www.mathworks.com/help/matlab/matlab_oop/property-validator-functions.html Property Validation Functions] ====
| | * debugging in classdef methods (and +package directory functions) |
|
| |
|
| === Open Bug Reports for Other Issues ===
| | Breakpoints cannot currently be set in classdef methods (or at least they are ignored). They also can't be set in functions in +package directories (which is a related issue). |
|
| |
|
| ==== Issues with basic classdef functionality ==== | | ==== supported ==== |
|
| |
|
| * {{bug|51659}} Calling 'methods' on self causes syntax error | | * methods |
| * {{bug|48682}} print_usage fails within classdef block | | ** static |
| * {{bug|48041}} classdef: `help myclass` messes up `help @myclass/method`
| | ** private |
| * {{bug|52096}} meta.class.fromName throws error when class name not found.
| |
| * {{bug|48693}} classdef subsref method is not called with correct nargout value - <em>Patch applied, Ready for Test</em>
| |
| * {{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 - <em>Patch submitted, awaiting review</em>
| |
| * {{bug|52582}} using static method to initialize property value fails | |
| * {{bug|45833}} support load/save of classdef objects | |
| * {{bug|60729}} print_usage within classdef constructor breaks subsequent calls to the class | |
| * {{bug|61676}} Assigning classdef objects to other types does not call converter methods
| |
| * {{bug|63841}} nargout is always 1 for classdef methods
| |
|
| |
|
| ==== Classdef and +package directories ==== | | ==== Classdef examples in the wild ==== |
|
| |
|
| * [https://savannah.gnu.org/bugs/?54941 54941] interpreter cannot find methods in files of classdefs in packages | | * http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/general/inputParser.m |
| | | * https://github.com/markuman/go-redis |
| ==== 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}} <s>unable to set breakpoints within classdef classes</s> - <em> Patch closed </em>
| |
| * {{bug|45404}} <s>Breakpoints cannot be set in classdef methods or +package function files</s> - <em>Report closed</em>
| |
| * {{bug|65610}} unable to set breakpoints within set or get functions of classdef classes - <em> Patch submitted </em>
| |
| | |
| ==== Lower-priority issues ====
| |
| | |
| * {{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
| |
| * {{bug|62432}} classdef object display of boolean matrix property fails with error message
| |
| | |
| ==== 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]]
| |