如何处理失败的Matlab构造函数?

时间:2015-03-16 20:08:02

标签: matlab

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

...构造函数可能失败的地方?

2 个答案:

答案 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;不会崩溃您的程序,如果可能的话,您仍然可以采取措施来纠正这种情况。