How to Share Data Between These Functions?
4 ビュー (過去 30 日間)
古いコメントを表示
Imagine I have myfun1 that loads struct A from disk. I have other functions that should use some fields of A to do some calculations.
function myfun1
global A
A = open( 'C:\A.mat' )
end
function myfun2
global A
A.B = 1;
end
function myfun3
global A
A.C = 2;
end
What is the best solution to allow these functions have access to struct A? I thought of Global Variables, so I make struct A global and then use it wherever I want. Is there a safer and better solution?
0 件のコメント
回答 (1 件)
Adam
2017 年 3 月 15 日
編集済み: Adam
2017 年 3 月 15 日
You haven't given any code that calls the functions, but the whole point of functions (or at least one of the main points) is that they take input arguments into a sealed workspace and then provide output arguments. Make use of them - pass your variable as n output argument from myfun1 and then just pass in the variables you need to the other functions, either the full struct or even just certain fields of it. Having a vast amount of data all on one struct is not a good design in the first place so multiple collections of data are generally better.
Don't use global variables though, they are bad for so many reasons (just do a google search or a search on this forum for global variables to see the overwhelming opinion on them) and have no place in proper code design, especially when you can simply pass arguments to a function to achieve the same thing.
3 件のコメント
Steven Lord
2017 年 3 月 15 日
For sharing data among callback functions of graphics objects in particular, see the techniques described in this documentation page.
Jan
2017 年 3 月 15 日
+1 "Don't use globals" is a very valuable advice.
The topic is discussed frequently. Search in the forum for "share data between callbacks".
参考
カテゴリ
Help Center および File Exchange で Structures についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!