Я написал очень простой графический интерфейс в MATLAB , который будет преобразовывать температуры. Он предназначен в качестве учебного пособия для класса студентов. Странная вещь произошла, хотя. Как и в любом шаблоне проектирования MVC , есть объект модели, объект представления и функция контроллера. Чтобы установить поле вывода GUI (преобразованную температуру), вы можете запустить эту строку в самой функции контроллера:
set(views.outputTextField,'string',num2str(round(model.outTemp)));
где views.outputTextField
- текстовое поле GUI для отображения преобразованной температуры, а model.outTemp
- преобразованная температура. Довольно просто. Объект views имеет ссылки на все графические элементы управления GUI, и это обновляет поле с помощью только что преобразованной температуры в объекте модели.
Однако я предпочел бы иметь функции вида в объекте вида, поэтому я попытался создать строку, подобную этой:
views.updateOutputField = @()set(views.outputTextField,'string',...
num2str(round(model.outTemp)));
Та же строка, что и раньше, только теперь она является анонимной функцией в объекте просмотра. Таким образом, я мог бы вызывать функцию из контроллеров просто как views.updateOutputField();
и не допускать логику просмотра в логику контроллера. Но этот метод не сработает! ( будет работать с функцией get()
.)
Вместо этого я должен сделать следующее:
views.updateOutputField = @updateOutputField
function updateOutputField()
set(views.outputTextField,'string',num2str(round(model.outTemp)));
end
Путем отделения функции (избыточно) вместо использования только анонимной функции она снова работает. Какие!? Это не имеет смысла для меня. Объекты вида и модели являются глобальными, и анонимная функция работает с get()
. Кто-нибудь знает, что здесь происходит?