我正在尝试在普通的MATLAB脚本中使用'KeyPressFcn',但我遇到了问题。我可以在一个函数(like here)中很好地使用它,但是我想在正常的脚本中使用它。
我的简单脚本是:
%Entry Point
clear all
N = 100;
x = randn(1,N);
figHandle = figure(1);
clf(figHandle);
set(figHandle, 'KeyPressFcn', myFunction(~, eventDat,x,N))
以下是位于同一目录中的函数'myFunction':
function myFunction(~, eventDat,x,N)
mean = sum(x)/N;
disp(mean);
key = eventDat.Key;
disp(key);
end
现在,如果我运行它,它不起作用,因为,(我怀疑),我调用myFunction的方式出了问题,但是我无法弄清楚究竟是什么问题,因为我是一个菜鸟使用KeyPressFcn。对于这个问题,将不胜感激。谢谢!
答案 0 :(得分:3)
您需要通过匿名函数来执行此操作:
在脚本文件中,例如名为test.m
:
%Entry Point
clear all
N = 100;
x = randn(1,N);
figHandle = figure(1);
clf(figHandle);
set(figHandle, 'KeyPressFcn', ...
@(fig_obj , eventDat) myFunction(fig_obj, eventDat, x, N));
在与test.m
相同的文件夹中名为myFunction.m
的文件中
function myFunction(~, eventDat, x, N)
mean = sum(x)/N;
disp(mean);
key = eventDat.Key;
disp(key);
如何从myFunction返回值?
有few ways这样做。这取决于你想做什么。但很快就可以使用可变变量,例如containers.Map
。这就是这个的一个例子。返回的变量是newN
。
在脚本文件中,例如名为test.m
:
%Entry Point
clear all
N = 100;
x = randn(1,N);
% this map will store everything u want to return from myFunction.
returnMap = containers.Map;
figHandle = figure(1);
clf(figHandle);
set(figHandle, 'KeyPressFcn', ...
@(fig_obj , eventDat) myFunction(fig_obj, eventDat, x, N, returnMap));
% wait till gui finishes in this example.
waitfor(figHandle);
newN = returnMap('newN');
% display newN
newN
在名为myFunction.m
的文件中:
function myFunction(handle, eventDat, x, N, returnMap)
mean = sum(x)/N;
disp(mean);
key = eventDat.Key;
disp(key);
newN = 435;
returnMap('newN') = newN;