Classdef: Difference between revisions

From Octave
Jump to navigation Jump to search
(→‎Not Supported: add link to bug report)
Line 144: Line 144:


* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/general/inputParser.m
* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/general/inputParser.m
* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/%2Bcontainers/Map.m
* https://github.com/markuman/go-redis
* https://github.com/markuman/go-redis
* https://github.com/PetrKryslUCSD/FinEALE
* https://github.com/PetrKryslUCSD/FinEALE

Revision as of 08:26, 9 November 2017

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

See #45404

  • Saving/reading classdef objects to/from (.mat) file

Supported

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

Classdef examples in the wild