Classdef: Difference between revisions

From Octave
Jump to navigation Jump to search
m (use direct url instead of archived docs)
(local functiosn in classdef files)
Line 42: Line 42:
As a workaround, we can create an indirection using an anonymous function <code>fh = @(varargin) mypackage.myfunc(varargin{:})</code>.
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.
Similarly for static class methods where <code>fh = @MyClass.myfunc</code> isn't yet supported.
* 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
function myfunc()
    disp('myfunc')
end
</source>


==== supported ====
==== supported ====

Revision as of 09:35, 19 June 2015

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

not supported

  • enumeration
  • build-in class as superclass
    • classdef nonsense < uint32
  • array of objects. 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
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.

  • Defining local functions in the same classdef-file is not working. 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

supported

  • methods
    • static
    • private

Classdef examples in the wild