Matlab equivalent to calling inside static class

前端 未结 2 588
礼貌的吻别
礼貌的吻别 2020-12-18 05:55

Confer the following code:

classdef highLowGame
    methods(Static)
        function [wonAmount, noGuesses] = run(gambledAmount)
            noGuesses = \'so         


        
相关标签:
2条回答
  • 2020-12-18 06:31

    Not an answer to your question directly, but it's worth noting that you can also put "local functions" after the end of your classdef block in your class.m file, and these behave like private static methods, but you do not need to invoke them using the class name. I.e.

    % myclass.m
    classdef myclass
      methods ( Static )
        function x = foo()
          x = iMyFoo();
        end
      end
    end
    function x = iMyFoo()
      x = rand();
    end
    % end of myclass.m
    
    0 讨论(0)
  • 2020-12-18 06:46

    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.

    0 讨论(0)
提交回复
热议问题