共享工作区之间的数据

介绍

本主题显示了如何在工作区之间共享变量或让他们的功能执行之间仍然存在。

在大多数情况下,变量的函数内创建的本地仅在该函数已知变量。局部变量不可在命令行或任何其他功能。然而,有几种方式来分享功能或工作区之间的数据。

最佳实践:传递参数

扩展函数变量的范围,最安全的方式是使用功能的输入和输出参数,它允许您传递的变量的值。

例如,创建两个功能,UPDATE1UPDATE2,该共享并修改的输入值。UPDATE2可以是文件中的本地函数update1.m,也可以是一个函数,它自己的文件,update2.m

功能Y1 = UPDATE1(X1)Y1 = 1 + UPDATE2(X1);功能Y2 = UPDATE2(×2)Y2 = 2 * X2;

调用UPDATE1在命令行功能,并分配给可变ÿ在基础工作区:

X = [1,2,3];Y = UPDATE1(X)
Y = 3 5 7

嵌套函数

嵌套函数可以访问的,其中它嵌套的所有功能的工作区。因此,举例来说,一个嵌套函数可以使用一个变量(在这种情况下,X),其在它的父功能定义为:

功能primaryFx X = 1;nestedFx功能nestedFx X = X + 1;结束结束

当父功能不使用给定的变量,该变量保持局部的嵌套函数。例如,在这个版本中primaryFx,两个嵌套函数都有自己的版本X不能与彼此交互。

功能primaryFx nestedFx1 nestedFx2功能nestedFx1 X = 1;结束功能nestedFx2 X = 2;结束结束

欲了解更多信息,请参阅嵌套函数

持久变量

当一个函数作为永久内声明一个变量,该变量保留其值从一个函数调用到下一个。当地的其他变量只有一个函数的当前执行过程中保持自己的价值。持久变量相当于其他编程语言的静态变量。

使用声明变量一贯关键字之前使用它们。MATLAB®初始化持久变量为空矩阵,[]

例如,在一个名为文件中定义一个函数findSum.m初始化一个总和0,然后添加到在每次迭代的值。

功能findSum(inputValue将)一贯SUM_X如果的isEmpty(SUM_X)SUM_X = 0;结束SUM_X = SUM_X inputValue的+;

当你调用该函数的值SUM_X后续的执行依然存在。

这些操作清除功能的持久性变量:

  • 清除所有

  • 明确functionname

  • 编辑功能文件

为了防止清除持久性变量,使用锁定功能文件m锁

全局变量

全局变量是可以从功能或命令行访问的变量。他们有自己的工作空间,这是从基础和功能的工作区分开。

然而,全局变量进行显着的风险。例如:

  • 所有功能都可以访问和更新一个全局变量。使用该变量的其他功能可能会返回意外的结果。

  • 如果你无意中给一个“新”的全局变量相同的名称与现有的全局变量,一个功能可以覆盖由另一个预期值。此错误是很难诊断。

使用全局变量谨慎,如果在所有。

如果你使用全局变量,使用它们申报全球关键字,您的任何特定位置(功能或命令行)中访问它们。例如,创建一个文件中的函数调用falling.m

功能H =下降(t)的全球。GRAVITY H = 1 / * *重力吨^ 2;

然后,在提示符处输入以下命令:

全球重力重力= 32;Y =下降沿((0:0.1:5)');

这两个全球语句使分配给value重力在命令提示可用的功能的内部。然而,由于更稳健的替代方案中,重新定义函数接受值作为输入:

功能H =下降沿(吨,重力)H = 1/2 * *重力吨^ 2;

然后,在提示符处输入以下命令:

比重= 32;Y =下降沿((0:0.1:5)”,重力);

在另一个工作区评估

evalinassignin函数可以从字符向量评估命令或变量名和指定是否使用当前或碱的工作区。

像全局变量,这些功能进行覆盖现有数据的风险。有节制地使用它们。

evalinassignin有时用于图形用户界面的回调函数,以评估相对于基部的工作空间是有用的。例如,创建从所述基部的工作区的变量名的列表框:

功能列表框图1b = uicontrol('样式''列表框''位置'[10 10 100 100],...'打回来',@ update_listBox);update_listBox(LB)功能update_listBox(SRC,〜)=瓦尔evalin('基础''WHO');src.String =乏;

对于其他的编程应用,考虑参数传递和描述的技术替代eval函数

相关话题