Jump to navigation Jump to search


3,430 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 ====
* '''enumeration'''Classdef properties are supported but not all attributes are implemented.
See {{bug|44582}} 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 help implementing itlisteners to be implemented in order to work properly.|-|Transient|No|Property exists but is not used.|}
==== Methods ====
* '''build-in class as superclass'''<source lang="octave">classdef nonsense < uint32Classdef methods are supported but not all attributes are fully implemented.
end{| class="wikitable"</source>|-! 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 ===
* '''[ concatenating objects] into [ array of objects].''' ==== enumeration ====
Example:<source lang="octave">Octave should be able to parse the enumeration section of a classdef MyClass < handleenddefinition but nothing is done with it. Progress on this feature is tracked in bug report {{bug|44582}}.
c = MyClass();cc = [c, c]; % won't work</source>== events and listeners ====
For now you can use Octave should be able to parse the events section of a cell-array of objects instead:<source lang="octave">cc = classdef definition but nothing is done with it. Progress on this feature is tracked in bug report {{c, cbug|56194}}; % ok</source>.
=== Open Bug Reports for Other Issues ===
* '''[ Immutable property] set access.'''Example:<source lang="octave">=== Issues with basic classdef MyClass < handle properties (SetAccess functionality == immutable) x end methods function obj = MyClass() x = rand(); end endend</source>
Use * [ 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* [ 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 as workaround* [ 52582] using static method to initialize property value fails* [ 45833] support load/save of classdef objects
==== Classdef and +package directories ====
* '''Function handles to package methods and static class methods.'''For example if we have <code>+mypackage[https://myfuncsavannah.m</code>, creating a function handle as <code>fh = @mypackagegnu.myfunc<org/code> won't work.As a workaround, we can create an indirection using an anonymous function <code>fh = @(varargin) mypackage.myfunc(varargin{:})<bugs/code>.Similarly for static class ?54941 54941] interpreter cannot find methods where <code>fh = @MyClass.myfunc</code> isn't yet supported. Another workaround for package function handles is to use <code>str2func</code>, e.g. <code>fh = str2func ("mypackage.myfunc")</code>.in files of classdefs in packages
A fuller example is also given below:<source lang="octave">=== Arrays of classdef method_function_handle_testobjects ====
% properties* [ 44665] error in concatenation of classdef objects% % % end* [ 53906] Cannot make an object array with square brackets properties (Hidden, SetAccess = protected) hfoo = * [ 47755];% handle Access to functionobject arrays end methods function self = method_function_handle_test () self* [https://savannah.hfoo = @foo; end function bar (self) selfgnu.hfoo (self); endorg/bugs/?47241 47241] classdef: assigning property of handle object in object array constructs new object
end methods (Hidden, Access = protected) function foo === Debugger (selffixes for these are in progress) disp ('hello!'); end end====
end</source>Then running:<source lang="text">>> x = method_function_handle_testerror* [https: @foo: no function and no method founderror: called from method_function_handle_test at line 17 column 17stopped in <****>/scratch/ at line 17?46451 46451] unable to set breakpoints within classdef classes17* [https: self//savannah.gnu.hfoo = @foo;<org/bugs/source>?45404 45404] Breakpoints cannot be set in classdef methods or +package function files
==== Lower-priority issues ====
* [ 55488] Invalid use of colon char as classdef function'''Defining s argument when subsref is overwritten* [httphttps://wwwsavannah.mathworksgnu.comorg/helpbugs/matlab?54966 54966] Error when assigning array to an object implementing subsasgn() subscripted using "{}"* [https:/matlab_oop/specifying-methods-and-functionssavannah.gnu.html#br2la89 local functionsorg/bugs/?54028 54028] in the same classdefcopy of non-file handle class instance is not workingdeep* [https://savannah.''' 53811] cellfun does not find overloaded function with function name argumentFor example, the following code gives a syntax* [ ?52989 52989] classdef: missing errormessages on multiply defined properties* <strike>[ 52614] setting properties of classdef object during construction with inheritance<source lang="octave"/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 MyClassconstructor * [ 50395] subclassing a class that is also defined as a variable fails* [ 50011] failure to report error on conflicting methodsfor classdef* [ 49379] classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1) function obj = MyClass* [ 55810] sizeof() and whos()returns 0 bytes for classdef objects* [ 45893] classdef properties are not reloaded when file is updated myfunc* [ 44643] classdef handle object can go into an recursive loop with isequal(obj1,obj2)if both are self-referential end* [ 55755] mxGetProperty does not work with properties marked as Dependent end* [ 55767] classdef property should not be the same as classdef name (at least for Matlab compatibility)end* [ 44035] unable to subclass built-in types
function myfunc() disp('myfunc')end</source>==== Documentation ====
See {{bug|41723}}* [ 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
* '''debugging in classdef methods (and +package directory functions)''' Breakpoints cannot currently be set in classdef methods from the gui, but only from the command line:<source lang="octave">dbstop @aclass\amethod </source> * '''Saving/reading classdef objects to/from (.mat) file''' === Supported === * methods** static** private * properties** SetAccess (public/private/protected) ==== Classdef examples in the wild ====

Navigation menu