Effacer les filtres
Effacer les filtres

Trouble with callback with uimenus

1 vue (au cours des 30 derniers jours)
Hanif
Hanif le 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?

Réponse acceptée

Jan
Jan le 28 Mai 2013
Modifié(e) : Jan le 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 commentaire
Image Analyst
Image Analyst le 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!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Startup and Shutdown dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by