Matlab的等同于静态类中调用(Matlab equivalent to calling insi

2019-07-04 01:12发布

赋予下面的代码:

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

有没有一种方法调用同一类方法(静态内)的静态方法,而无需编写的类名? 像“self.getPayout(...)” - 如果该类原来去500线,我想重新命名它。

Answer 1:

据我所知,“无”与“但是”。 在一般情况下,你只能与指定的类名的静态方法。 但是,您可以假冒你的身边,因为MATLAB的限制方式有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

在此,类(个体)和mfilename都评价为“testStatic”,所以上述端向上计算“testStatic.getPi”的功能。

或者,alteratively,你可以写一个非静态方法,self.callStatic; 然后一直使用它。 里面那个,只需调用testStatic.getPi。 那么你只需要改变一行。



Answer 2:

不回答你的问题直接,但值得一提的是,你还可以把“本地功能”你结束后classdef在块class.m文件,这些行为类似于私有静态方法,但你并不需要调用他们使用类名。 即

% myclass.m
classdef myclass
  methods ( Static )
    function x = foo()
      x = iMyFoo();
    end
  end
end
function x = iMyFoo()
  x = rand();
end
% end of myclass.m


文章来源: Matlab equivalent to calling inside static class