Предисловие: Не стоит ожидать слишком многого от возможностей Matlab oop. Несмотря на то, что с matlab> 2008a дела пошли лучше, по сравнению с реальным языком программирования, поддержка Matlab очень плохая.
Исходя из моего опыта, Mathworks пытается максимально защитить пользователя от ошибок. Иногда это также означает, что они ограничивают возможности.
Глядя на ваш пример, я считаю, что происходит то же самое.
Возможный ответ: Поскольку Matlab не имеет явной типизации (переменные / параметры набираются на лету), ваш код может столкнуться с проблемами. Представьте себе:
$ a = iter_test()
% a.yo is set to 1
% let's overwrite 'yo'
$ a.yo = struct('somefield', [], 'second_field', []);
% a.yo is now a struct
Поэтому следующий код не будет работать:
$ for a.yo
disp('hey');
end
Могу поспорить, что если бы matlab поддерживал типизацию параметров / переменных, ваш код работал бы просто отлично. Однако, поскольку вы можете назначить совершенно другой тип данных параметру / переменной после инициализации, компилятор не позволяет вам делать то, что вы хотите, потому что у вас могут возникнуть проблемы.