Classdef

From Octave
Revision as of 23:47, 9 December 2016 by Amro (talk | contribs) (→‎Not Supported: add link to bug report)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This page is a stub. We should begin documenting what classdef is implemented and what is not.

Not Supported

  • enumeration

See #44582 and help implementing it.


  • build-in class as superclass
classdef nonsense < uint32

end

See #44035

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

Also see #44665

Example:

classdef MyClass < handle
    properties (SetAccess = immutable)
        x
    end
    methods
        function obj = MyClass()
            x = rand();
        end
    end
end

Use "private" properties as workaround.


  • Function handles to package methods and static class methods.

For example if we have +mypackage/myfunc.m, creating a function handle as fh = @mypackage.myfunc won't work. As a workaround, we can create an indirection using an anonymous function fh = @(varargin) mypackage.myfunc(varargin{:}). Similarly for static class methods where fh = @MyClass.myfunc isn't yet supported. Another workaround for package function handles is to use str2func, e.g. fh = str2func ("mypackage.myfunc").

A fuller example is also given below:

classdef method_function_handle_test

%  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); 
    end

  end
  
  methods (Hidden, Access = protected)
    function foo (self)
      disp ('hello!');
    end
  end

end

Then running:

>> x = method_function_handle_test
error: @foo: no function and no method found
error: called from
    method_function_handle_test at line 17 column 17
stopped in <****>/scratch/mfiles/octave_tests/method_function_handle_test.m at line 17
17:       self.hfoo = @foo;

See #45351

For example, the following code gives a syntax/parse error:

classdef MyClass
    methods
        function obj = MyClass()
            myfunc()
        end
    end
end

function myfunc()
    disp('myfunc')
end

See #41723.

  • 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:

dbstop @aclass\amethod
  • Saving/reading classdef objects to/from (.mat) file

Supported

  • methods
    • static
    • private
  • properties
    • SetAccess (public/private/protected)

Classdef examples in the wild