未定义函数 'addListener'

Undefined function 'addListener'

我正在阅读 Matlab OOP pdf 的 pdf 书,在实现银行帐户第 3 章的代码后,它抱怨了一些事情。

>> BA = BankAccount(1234567, 500)
    Undefined function 'addListener' for input arguments of type 'BankAccount'.
Error in AccountManager.addAccount (line 20)
            lh = addListener(BA, 'InsufficientFunds', @(src,
            ~)AccountManager.assignStatus(src))
Error in BankAccount (line 21)
            BA.AccountListener = AccountManager.addAccount(BA); 

我不知道为什么会这样,因为我按照给出的示例进行操作,如:

classdef BankAccount < handle
    %UNTITLED Summary of this class goes here
    %   Detailed explanation goes here
    properties (Access = ?AccountManager)
    AccountStatus = 'open'
    end
    properties (SetAccess='private')
        AccountNumber
        AccountBalance
    end
    properties (Transient) %not saved
        AccountListener
    end
    events
        InsufficientFunds
    end
    methods
        function BA = BankAccount(AccountNumber, InitialBalance)
            BA.AccountNumber = AccountNumber;
            BA.AccountBalance = InitialBalance;
            BA.AccountListener = AccountManager.addAccount(BA);
        end

        function deposit(BA, amt)
            BA.AccountBalance = BA.AccountBalance + amt
            if BA.AccountBalance > 0
                BA.AccountStatus = 'open'
            end
        end

        function withdraw(BA, amt)
            if (strcmp(BA.AccountStatus, 'closed') && BA.AccountBalance <= 0)
                disp(['Account', num2str(BA.AccountNumber), 'has been closed'])
                return
            end
            newBal = BA.AccountBalance - amt
            BA.AccountBalance = newBal
            if newBal < 0
                notify(BA, 'InsufficientFunds')
            end
        end

        function getStatement(BA)
            disp('-----------')
            disp(['Account', num2str(BA.AccountNumber)])
            ab = sprintf('%0.2f', BA.AccountBalance)
            disp(['Current Balance', ab])
            disp(['Account Status', BA.AccountStatus])
            disp('-----------')
        end

    end
    methods (Static)
        function obj = loadObj(s)
            if isstruct(s)
                accNum = s.AccountNumber
                initBal = s.AccountBalance
                obj = BankAccount(accNum, initBal)
            else
                obj.AccountListener = AccountManager.addAccount(s)
            end
        end

    end


end

并且:

classdef AccountManager
    %UNTITLED2 Summary of this class goes here
    %   Detailed explanation goes here

    properties
    end

    methods (Static)
        function assignStatus(BA)
            if BA.AccountBalance < 0
                if BA.AccountBalance < -200
                    BA.AccountStatus = 'closed'
                else
                    BA.AccountStatus = 'overdrawn'
                end
            end
        end

        function lh = addAccount(BA)
            lh = addListener(BA, 'InsufficientFunds', @(src, ~)AccountManager.assignStatus(src))
        end

    end

end

谁能告诉我这是怎么回事?在 Matlab R2014a(8.3.0.532) 上。我想我已经正确实施但没有复制粘贴,也许我忽略了一行。谢谢

那是因为你对 method 的拼写有点不对。它被称为 addlistener - 小写 l。当你拼写时,你有一个大写的 L。

您所引用的书是 MATLAB 的官方面向对象编程指南 - http://www.mathworks.com/help/pdf_doc/matlab/matlab_oop.pdf。有问题的代码在第 3-16 页。

请记住,MATLAB 区分大小写。即使字符是不同的大小写,它也会被解释为不同的变量、函数等。别担心 - 我认为 addListener 更自然,因为有两个词。 addlistener 只是……很奇怪!