【问题标题】:Function with input type double in classdefclassdef 中输入类型为 double 的函数
【发布时间】:2017-11-13 12:14:33
【问题描述】:

我从 Matlab 中的 oop 开始,似乎错过了一些东西。

classdef car < handle

properties (Access = public)
    a
    b
end

methods
    function obj = update(obj)
        obj.b = updateB(obj.a, obj.b);
    end

    function B = updateB(a, b)
        B = a + b;
    end
end

end

我每次都得到著名的Undefined function 'updateB' for input arguments of type 'double'. 错误,我尝试调用函数update。奇怪的是,如果我将 updateB 更改为:

function B = updateB(obj)
    B = obj.a + obj.b;
end

我错过了什么?我并不总是想用 obj 调用 updateB,因为我想使用函数而不使用实际对象的属性。

【问题讨论】:

    标签: matlab oop


    【解决方案1】:

    如果您不希望该方法依赖于特定实例,请使用以下方法:

    methods
        function obj = update(obj)
            obj.b = car.updateB(obj.a, obj.b);
        end
    end
    
    methods (Static)
        function B = updateB(a, b)
            B = a + b;
        end
    end
    

    【讨论】:

    • 太好了,谢谢!你能解释一下,为什么我突然不得不以'class.function()'的风格调用函数吗?总是这样调用内部函数是最佳做法吗?
    • 静态方法不属于特定实例。顾名思义,它们是在您的类中定义的静态例程。因此,您必须将它们称为 ClassName.Function。详细信息:it.mathworks.com/help/matlab/matlab_oop/static-methods.html
    猜你喜欢
    • 2020-07-20
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多