Нет закрытия соединения `matfile`?

matfile Команда открывает то, что похоже на постоянное соединение с *.mat файл. В большинстве ситуаций кодирования, когда к файлу обращаются, необходимо закрыть указанный файл. Там нет упоминания об этом на странице, ссылка на которую приведена выше. Это кажется мне необычным, но могу ли я предположить, что закрытие не нужно?

1 ответ

Решение

Возвращаемый объект принадлежит к классу matlab.io.MatFile, который является классом дескриптора.

В MATLAB классы дескрипторов являются типом классов, которые работают не так, как обычные матрицы. Они не копируются, они всегда передаются по ссылке. Создание копии просто делает новую ссылку на объект. Этот тип объекта используется в основном для собственных ресурсов. Ресурсы автоматически освобождаются, когда очищается последняя из ссылок на объект.

Таким образом, чтобы закрыть соединение, вы можете просто удалить переменную, которая содержит ссылку:

m = matfile(filename);
% ... read/write from file
clear m

... но учтите, что вам не нужно делать это явно, потому что локальные переменные автоматически очищаются в конце области (то есть, когда функция возвращается).

Для получения дополнительной информации о классах дескрипторов см. Эту страницу документации.

Другие вопросы по тегам