我正在阅读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)上。我想我已经正确实施但没有复制粘贴,也许我忽略了一条线。感谢。
答案 0 :(得分:3)
那是因为拼写方法的方式略有不正确。它被称为addlistener
- 小写l
。拼写时你有一个大写字母L.
您正在引用的书是MATLAB的官方面向对象编程指南 - http://www.mathworks.com/help/pdf_doc/matlab/matlab_oop.pdf。有问题的代码在第3-16页。
请记住,MATLAB区分大小写。即使字符是不同的情况,它也会被解释为不同的变量,函数等。不要担心 - 我认为addListener
更自然,因为有两个单词。 addlistener
只是......很奇怪!