2016-12-14 242 views
0

有什么方法可以在主函数中定义一个变量并在所有子函数中使用它。 enter image description here定义一个变量并在Matlab的所有子函数中使用它

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

使用变量作为global

main program 
global x 
syms x 
subfunc1 
subfunc2 
... 

subfunc1 
global x 

subfunc2 
global x 

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

+6

将它作为argumeeeeent传递!使用全局变量是一个可怕的想法。 MATLAB函数的负载将在其中使用一个名为“x”的变量,并且每次发生时都会覆盖您的'x'! –

回答

0

你可以做的一件事是将其他函数定义为主函数的子函数。像下面

两者的功能subFunc1和subFunc2应该有访问数据你mainFunc定义它上面的东西

function mainFunc() 
variable1 = 'stuff'; 
variable2 = 5; 
    function subFunc1() 
     %do stuff 
    end 

    function subFunc2() 
     %do more stuff 
    end 
end 

编辑1

当然,你可以定义全局数据在子函数中使用mainFunc,但我不会推荐这么做,因为它可以以意想不到的方式进行更改,而您并不打算发生这种情况。

1

如果你确实想访问同一个变量,那么在Matlab中只有两种方法我知道: 嵌套函数(由@ justthom8回答描述)和全局变量。其他获取数据到函数的方法也存在,比如getappdata,guidata和(我个人最喜欢的:)传递函数参数。但是,这些方法会复制变量。

也许你应该问自己,为什么你想避免做变量的副本。如果你担心性能,你应该知道Matlab有效地使用变量作为参考数据,所以你可以安全地发送一个变量到一个函数(从而复制变量)而不复制实际数据。它是在修改数据实际被复制的函数内部的数据之后的第一个。所有这些对我们来说完全不可见,除非在复制过程中性能可能下降。这被称为写时复制(copy-on-write)。

全局变量可以be used to optimize Matlabs performance,通过编写它们以避免复制数据,但这确实需要知道你在做什么,并且它打开了大量的陷阱,尤其是如果你的项目的规模增长。

相关问题