Two ways of M-subfunction definition: what are discrepances?

1 回表示 (過去 30 日間)
Igor
Igor 2011 年 5 月 18 日
As known, there are 2 ways -- nested subroutines and secondaries subr.
1. nested
function...
...
function...
...
end
...
end
2. primary/secondary
function
...
end
function
...
end
From header (primary function)one can call both nested and secondary subfunctions.
But what kind is better to use? What are differences between ?

採用された回答

Andrew Newell
Andrew Newell 2011 年 5 月 18 日
The primary/secondary functions are much like two functions in separate files, except that the secondary functions (called subfunctions) are only seen by the other functions in the same file. Generally, the variables in functions should be hidden from each other, so this is the default choice. Use nested functions when you need the specific advantages that stem from having access to variables in the workspace of the calling function.
Nested functions are great for:
  1. "Memoizing" (storing) results of costly calculations for later use (see Loren's blog).
  2. Creating custom functions with hidden parameters that are set by the calling function (as in this example). This is like a fancy anonymous function.
  1 件のコメント
Matt Fig
Matt Fig 2011 年 5 月 18 日
I would add
3. GUI callbacks. The use of nested functions for GUIs eliminates almost all "How do I share data between callbacks" questions. When I write a complex GUI, it is only with nested functions anymore.

サインインしてコメントする。

その他の回答 (2 件)

Yoav Livneh
Yoav Livneh 2011 年 5 月 18 日
In the first case, the second function is nested and only the outer function can call it. Furthermore the nested function can read and use parameters from the caller function's workspace.
In the second case each function has its own workspace and they don't share parameters.

Igor
Igor 2011 年 5 月 18 日
Thanks for answers. As I understand, if varname in nested func. coincides with varname in primary func. that uses variable that was defined in primary func. Perhaps, secondary func. is like private methods in object oriented programming.
Another question, on analogy with C++. When I call nested or secondary func. -- subfun(par) -- a new region of memory is reserved and here value is copied from calling func. That is -- dublicating exists.
  2 件のコメント
Andrew Newell
Andrew Newell 2011 年 5 月 18 日
Yes, subfunctions are a bit like private methods.
No, the value of a function argument is not copied unless the argument is changed within the function. See http://www.mathworks.com/help/techdoc/matlab_prog/brh72ex-2.html#brh72ex-13.
Igor
Igor 2011 年 5 月 18 日
On 2nd question: but if changed then copied!
Very rational rule!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeVariables についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by