首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >定义一个变量并在Matlab上的所有子函数中使用它

定义一个变量并在Matlab上的所有子函数中使用它
EN

Stack Overflow用户
提问于 2016-12-14 21:38:10
回答 2查看 639关注 0票数 0

有没有办法在main函数中定义一个变量并在所有子函数中使用它?

我试图将变量声明为global,但似乎我应该在所有函数中重复一次。我想知道全局变量到底有什么好处!

将变量用作global

代码语言:javascript
运行
复制
main program
global x
syms x
subfunc1
subfunc2
...

代码语言:javascript
运行
复制
subfunc1
global x

代码语言:javascript
运行
复制
subfunc2
global x

(也许这种格式提醒我们在函数中有全局变量,但如果我们在函数中使用与Matlab关键字相同的变量名称会更好)我不想将变量作为所有函数参数导入,也不想在所有函数中一次又一次地声明该变量。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2017-02-01 09:07:02

如果你真的想访问同一个变量,那么我知道在Matlab中只有两种方法:嵌套函数(由answer from @ and thom8描述)和全局变量。还有其他将数据放入函数的方法,比如getappdata、guidata和(我个人最喜欢的:)传递函数参数。但是,这些方法会复制变量。

也许您应该问问自己,为什么要避免复制变量。如果您担心性能,您应该知道Matlab有效地将变量仅用作对数据的引用,因此您可以安全地将变量发送到函数(从而复制变量),而无需复制实际数据。在修改函数内部的数据后,第一次是实际复制数据。所有这一切对我们来说都是完全看不见的,除非在大量复制过程中可能会出现性能下降。这称为写入时复制。

全局变量可以be used to optimize Matlabs performance,通过以避免复制数据的方式进行编码,但这确实需要知道您正在做什么,并且它会暴露出很多陷阱,特别是当您的项目变得越来越大时。

票数 1
EN

Stack Overflow用户

发布于 2016-12-15 01:29:53

您可以做的一件事是将其他函数定义为main函数的子函数。类似于下面的内容

subFunc1和subFunc2这两个函数都应该能够访问您在mainFunc中定义的数据

代码语言:javascript
运行
复制
 function mainFunc()
 variable1 = 'stuff';
 variable2 = 5;
    function subFunc1()
        %do stuff
    end

    function subFunc2()
       %do more stuff
    end
end

编辑1个

当然,您可以在子函数中使用的mainFunc中定义全局数据,但我不建议这样做,因为它可能会以意想不到的方式发生更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41144036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档