Jump to navigation Jump to search


3,760 bytes added, 20 May
→‎Lower-priority issues: Update bug #52614.
This page is a stub. We should begin documenting what classdef is implemented and what is not.=== Supported Features ===
==== not supported Properties ====
* debugging in classdef methods (and +package directory functions)Classdef properties are supported but not all attributes are implemented.
Breakpoints cannot currently {| 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 set implemented in classdef methods (or at least they are ignored)order to work properly.|-|Hidden|Yes||-|NonCopyable|No|Property does not exist.|-|SetAccess|Partial||-|SetObservable|No|Property exists but is not used. They also can't Requires events and listeners to be set implemented in functions in +package directories (which order to work properly.|-|Transient|No|Property exists but is a related issue)not used.|}
* enumeration==== Methods ====
* build-in class as superclass ** <source lang="octave" enclose="none">classdef nonsense < uint32</source>Classdef methods are supported but not all attributes are fully implemented.
* [http{| class="wikitable"|-! style="text-align://;"| Attribute! Support! Notes|-concatenation|Abstract|Partial|See bug report {{bug|51377}}|-for|Access|Yes||-your|Hidden|Yes||-class.html concatenating objects] into [|Sealed|Yes||-object-arrays.html array of objects]. Example:<source lang="octave">|Static|Yesclassdef MyClass < handle|end|}
c = MyClass();cc = [c, c]; % won't work</source>= Features that are not implemented ===
For now you can use a cell-array of objects instead:<source lang="octave">cc = {c, c}; % ok</source>== enumeration ====
* [ should be able to parse the enumeration section of a classdef definition but nothing is done with it.html Immutable property] set access Progress on this feature is tracked in bug report {{bug|44582}}. Example:<source lang="octave">classdef MyClass < handle properties (SetAccess = immutable) x end methods function obj = MyClass() x = rand(); end endend</source>
Use "private" properties as workaround.==== events and listeners ====
* Function handles Octave should be able to package methods and static class methods.For example if we have <code>+mypackage/myfunc.m</code>, creating parse the events section of a function handle as <code>fh = @mypackageclassdef definition but nothing is done with it.myfunc</code> won't work.As a workaround, we can create an indirection using an anonymous function <code>fh = @(varargin) mypackage.myfunc(varargin Progress on this feature is tracked in bug report {{:bug|56194}})</code>.Similarly for static class methods where <code>fh = @MyClass.myfunc</code> isn't yet supported.
A fuller example is also given below:<source lang="octave">classdef method_function_handle_test== Open Bug Reports for Other Issues ===
% properties% % % end properties (Hidden, SetAccess = protected) hfoo = [];% handle to function end methods function self = method_function_handle_test () self.hfoo = @foo; end function bar (self) self.hfoo (self); endIssues with basic classdef functionality ====
end* [ 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` methods * [ 43047] help() does not see classdef files* [ 42620] exist(Hidden, Access = protected)does not use "class" argument* [ 53874] doc_cache_create doesnt handle classdef documentation function foo * [ 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(selfend+1:n)- end is interpreted wrong disp * [ 55983] 'x(ix) = []'hello!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* [ 55768] display of classdef object should not show private or protected properties* [ 55766] properties function should not return Hidden properties* [ 55746] interpreter fails to instantiate classdef with classdef properties end* [ 52582] using static method to initialize property value fails end* [ 45833] support load/save of classdef objects
end</source>Then running:<source lang="text">>> x = method_function_handle_testerror: @foo: no function == Classdef and no method founderror: called from method_function_handle_test at line 17 column 17stopped in <****>/scratch/mfiles/octave_tests/method_function_handle_test.m at line 1717: self.hfoo +package directories ==== @foo;</source>
* [ 54941] interpreter cannot find methods in files of classdefs in packages
* Defining [ local functions] in the same ==== Arrays of classdef-file is not working. For example, the following code gives a syntax/parse error:<source langobjects ==="octave">classdef MyClass methods function obj = MyClass() myfunc() end endend
function myfunc()* [ 44665] error in concatenation of classdef objects disp('myfunc')* [ 53906] Cannot make an object array with square bracketsend* [ 47755] Access to object arrays<* [>?47241 47241] classdef: assigning property of handle object in object array constructs new object
==== supported Debugger (fixes for these are in progress) ====
* methods[ 46451] unable to set breakpoints within classdef classes** static** private[ 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* <strike>[ 52614] setting properties of classdef object during construction with inheritance</strike>* [ 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 ==== * [ 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 === Classdef examples in the wild ====

Navigation menu