Matlab equivalent to calling inside static class

class, matlab, oop, static

Solution

As far as I can tell, "no" with a "but". In general, you can only specify the static method with the class name. However, you can fake your way around the restriction since MATLAB has feval:

classdef testStatic

    methods (Static)
        function p = getPi()  %this is a static method
            p = 3.14;
        end
    end

    methods
        function self = testStatic()

            testStatic.getPi  %these are all equivalent
            feval(sprintf('%s.getPi',class(self)))
            feval(sprintf('%s.getPi',mfilename('class')))
        end
    end
end

Here, class(self) and mfilename both evaluate to 'testStatic', so the functions above end up evaluating 'testStatic.getPi'.

Or, alteratively, you can write a non-static method, self.callStatic; then always use that. Inside that, just call testStatic.getPi. Then you'll only need to change that one line.

Problem

Confer the following code: ``` classdef highLowGame methods(Static) function [wonAmount, noGuesses] = run(gambledAmount) noGuesses = 'something'; wonAmount = highLowGame.getPayout(gambledAmount, noGuesses); % <--- end function wonAmount = getPayout(gambledAmount, noGuesses) wonAmount = 'something'; end end end ``` Is there a way to call a static method of the same class (inside a static) method without having to write the class name? Something like "self.getPayout(...)" - in case the class turns out to get to 500 lines and I want to rename it.

Original source