Matlab docs给出了一个类的示例,该类在删除对象时关闭文件。我正在尝试与串口对象类似的东西,但如果我的构造函数无法获得对象的有效句柄,则其delete
方法必然会抛出错误。
所以我的问题是如何制作这样的东西:
classdef Filewriter < handle
properties (Access = private)
FileID
end
methods
function obj = Filewriter(filename)
obj.FileID = fopen(filename,'a'); % if this fails...
end
function writeToFile(obj,text_str)
fprintf(obj.FileID,'%s\n',text_str);
end
function delete(obj)
fclose(obj.FileID); % then this will also fail
end
end
end
...构造函数可能失败的地方?
答案 0 :(得分:2)
在构造函数中,您应该检查失败。在您的情况下,将FileID
与-1
进行比较并调用error
。在delete
方法中,同时检查FileID
对-1
,并且不执行fclose
,如果它是-1
,那么它将会干净地执行。
答案 1 :(得分:1)
如果是串口对象,你可以在classdef和constructor中做类似的事情:
...
properties
sp % serial port object
end
methods
function obj = SerialPort(portID)
sp = serial(portID);
try
fopen(sp)
catch
% Opening serial port failed. Do something to handle this.
end
end
end
...
关键是使用try-catch块,以便&#34; fopen&#34;不会崩溃您的程序,如果可能的话,您仍然可以采取措施来纠正这种情况。