2015-03-16 3 views
0

В Matlab docs приведен пример класса, который закрывает файл, если объект удален. Я пытаюсь что-то подобное с объектом последовательного порта, но если мой конструктор не сможет получить действительный дескриптор объекта, его метод delete обязательно вызовет ошибку.Как обрабатывать неудавшийся конструктор Matlab?

Так что мой вопрос заключается в том, чтобы сделать что-то вроде этого:

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

В конструкторе вы должны проверить наличие неисправности. В вашем случае, сравнивая FileID с -1 и вызывая error. В методе delete также проверьте FileID на -1 и не выполняйте fclose, если это -1, поэтому он будет выполнять чистоту.

1

Если это серийный объект порта, вы можете сделать что-то подобное в вашем classdef и конструктор:

... 
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 
... 

Ключ заключается в использовании примерочных поймать блок, так что ошибка брошена «Еореп» не приведет к сбою вашей программы, и вы все равно можете что-то сделать, чтобы исправить ситуацию, если это возможно.

+0

Я думаю, что fopen не бросает исключения в matlab ... (просто попробовал это). –

+0

@EugeneSh. Если это действительный COM-порт (серийный) идентификатор порта, он не собирается вызывать ошибку. Однако, если это недействительный COM-порт, он выдаст ошибку, по крайней мере, на моем компьютере. – scai

+0

Я проверил против несуществующего файла. –

Смежные вопросы