Filter löschen
Filter löschen

Trouble with callback with uimenus

1 Ansicht (letzte 30 Tage)
Hanif
Hanif am 28 Mai 2013
function startup
File = uimenu(fig,'Label','File');
Message = uimenu(File,'Label','Message','Callback',@display);
end
function display(hObj,event)
disp('Hello world')
end
When this runs through and I click on the menu I get an error saying the following:
Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Error in CreatingMenus>display
Error while evaluating uimenu Callback
Am I missing something really obvious?

Akzeptierte Antwort

Jan
Jan am 28 Mai 2013
Bearbeitet: Jan am 28 Mai 2013
Yes, you are missing something more or less obvious: When a line does not end with an semicolon, the built-in function display() is called to show the results in the command window. When you shadow the original display() function with a user-defined one, this function is called. And when it contains a line without a trailing semi-colon, it calls itself recursively.
Shadowing built-in function is a problem frequently. Therefore I'd avoid names like "display" and "startup" might lead to unexpected effects also.
Btw. you can investigate such problems by using the debugger. Set a breakpoint in the code and step through the program line by line. Then you can find out, where the recursion appears.
  1 Kommentar
Image Analyst
Image Analyst am 28 Mai 2013
Good to know. Sometimes you don't know you've overwritten a built-in function until you have a major fecal/turbine impact. I didn't know display() was a built in function, and only sometimes do I do "which -all myFunctionName" to see if it's a built-in function. I should have noticed startup when I read his post, but I didn't - good catch on your part. He really won the exacta when he picked two reserved function names!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Startup and Shutdown finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by