我在MATLAB中编写了一个非常简单的 GUI,可以转换温度。它旨在作为一类学生的教程。然而奇怪的事情发生了。与任何MVC设计模式一样,有一个模型对象、一个视图对象和一个控制器函数。为了设置 GUI 的输出字段(转换后的温度),您可以在控制器函数本身中运行此行:
set(views.outputTextField,'string',num2str(round(model.outTemp)));
其中views.outputTextField
是一个 GUI 文本字段,用于显示转换后的温度,model.outTemp
是转换后的温度。很简单。视图对象具有对所有 GUI uicontrols 的引用,这会使用模型对象中新转换的温度更新字段。
但是,我宁愿在视图对象中有视图函数,所以我尝试创建这样的一行:
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()
. 有谁知道这里发生了什么?