2

我正在尝试在普通的 MATLAB 脚本中使用“KeyPressFcn”,但我遇到了问题。我可以在一个函数中很好地使用它(就像这里),但我想像这样在一个普通的脚本中使用它。

我的简单脚本是:

%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 的菜鸟。对此问题的帮助将不胜感激。谢谢!

4

1 回答 1

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));

myFunction.m在与 test.m 相同的文件夹中调用的文件中

function myFunction(~, eventDat, x, N)

    mean = sum(x)/N;
    disp(mean);
    key = eventDat.Key;
    disp(key);

如何从 myFunction 返回值?有几种方法可以做到这一点。这取决于你想做什么。但很快您就可以为此使用可变变量,例如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;
于 2013-10-25T00:46:57.563 回答