主要内容

assignin

为指定工作区中的变量赋值

描述

例子

assignin (wsvar瓦尔指定的值瓦尔对该变量var在工作区中ws.例如,assignin('基地',' x ', 42)将值42赋给变量x在MATLAB®基本工作空间。

如果瓦尔需要求值,MATLAB在调用的函数中求值assignin,而不是在指定的工作区中ws.如果瓦尔函数句柄是否必须在调用的函数中可计算assignin

assignin函数对于这些任务是有用的:

  • 将数据从函数导出到基本工作区。

  • 在函数内部,更改在调用者函数的工作空间中定义的变量的值。例如,您可以更改调用函数参数列表中的变量的值。

例子

全部折叠

在当前工作文件夹中的文件中,创建一个函数,该函数将两个数字相加,然后将值赋给变量fcnStatus在基本工作区中。

函数c = myAdd(a,b);str = sprintf ('%s调用%d,%d (%s)'mfilename, a, b, char (datetime));assignin (“基地”“fcnStatus”str)结束

在命令提示符处,调用函数。

n = myAdd(2、3)
n = 5

查看fcnStatus变量,myAdd在基本工作区中分配的函数。

fcnStatus
fcnStatus = 'myAdd called with 2,3 (17- 11 -2017 14:56:14)'

在当前工作文件夹中的文件中,创建一个函数,该函数显示一个对话框,用于输入姓名和出生年份,并计算2050年的年龄。的assignin函数将值导出到MATLAB工作空间变量的名字age2050

函数Mydialog提示符= {输入的名字:““输入出生年:”};回答= inputdlg(提示);n =回答{1};回答birthyear = str2double ({2});一个= 2050 - birthyear;assignin (“基地”“名字”n);assignin (“基地”“age2050”,);结束

在命令提示符下运行函数,输入数据,然后单击OK。

mydialog

在工作区浏览器中查看导出的值。

创建一个函数,将输入年龄更改为42。调用assigninlocalfcn改变的值一个在主函数的工作空间中,updateAge

函数updateAge (a) validateattributes (a, {“数字”},{“标量”})流(“\ tYour年龄:% d \ n”一)localfcn流('\t你的更新年龄:%d\n',)结束函数localfcn assignin (“来电”“一个”, 42岁)结束

在命令提示符处,调用main函数。

updateAge (37)
你的年龄:37你的最新年龄:42

虽然本示例描述了如何将变量分配到调用者工作区,但最佳实践是使用本地函数localfcn返回更新的年龄作为输出参数。

在当前工作文件夹中的文件中,创建一个函数来查找随机数组的最小值。的assignfh局部函数指定函数句柄跳频的工作空间minRand.的minRand功能评估跳频与输入n

函数m = minRand(n) assignfh A = fh(n) m = min(A(:));结束函数赋值fh = @(dim) and(dim);assignin (“来电”“跳频”跳频)结束

调用输入值为2的函数。

m = minRand (2)
A = 0.3486 0.1423 0.0419 0.0766 m = 0.0419

函数句柄的计算结果是一个2乘2的随机数数组。

创建函数的另一个版本,调用minRand2,其中局部函数覆盖兰德函数定义中的函数。

类似于minRand的例子中,assignfh2本地函数分配跳频的工作空间minRand2.的assignfh2功能覆盖了兰德函数在其工作区中使用一个名为兰德并创建函数句柄。这种行为与匿名函数是一致的——函数句柄是使用创建时可用的变量创建的。因此,函数在minRand2结果n索引的兰德数组中定义assignfh2

函数m = minRand2(n) assignfh2(n) A = fh(n) m = min(A(:)); / /结束函数Assignfh2 (n) rand = 13*ones(n);跳频= @(暗)兰德(暗);assignin (“来电”“跳频”跳频)结束

调用输入值为2的函数。

m = minRand2 (2)
A = 13 m = 13

当将匿名函数赋值给调用者工作空间时,MATLAB将函数句柄的定义放在调用者工作空间的变量中。调用的函数assignin计算函数句柄。虽然本示例描述了如何将变量分配到调用者工作区,但最佳实践是使用本地函数assignfh将函数句柄作为输出参数返回。

输入参数

全部折叠

工作空间,指定为“基地”“来电”

要在MATLAB基础工作空间中赋值,请使用“基地”.基本工作区存储您在MATLAB命令提示符中创建的变量,包括脚本创建的任何变量,假设您从命令行或编辑器中运行脚本。

要在调用者函数的工作空间中分配变量,请使用“来电”.调用者工作区是调用当前运行函数的函数的工作区。例如,假设funA调用funB.的调用者工作区funBfunA.因此,从funB,你可以给变量赋值funA使用assignin并指定工作区为“来电”

请注意

给调用者工作空间中的变量赋值可能会使代码更难理解,给用户带来意想不到的结果(在他们的工作空间中出现意想不到的或重新定义的变量),并对性能产生负面影响。最佳实践是让函数返回变量作为输出参数。

基本工作区和调用者工作区在以下情况下是等价的:

  • 在命令提示符处调用一个函数,然后调用主函数assignin

  • 你叫assignin在命令提示符处。

数据类型:字符|字符串

变量名,指定为字符向量或字符串标量。如果var在指定的工作区中不存在assignin函数创建它。

数据类型:字符|字符串

变量的值,指定为标量或数组值。瓦尔可以有任何数据类型,并可以包括MATLAB表达式。

如果变量的值需要求值,MATLAB会求包含调用的函数中的表达式assignin,而不是在指定的工作区中ws.如果瓦尔函数句柄是否必须在调用的函数中可计算assignin

例子:5

例子:“你好”

例子:兰德(7)

例子:@cos

提示

  • assignin函数不对数组中的特定元素赋值。因此var不能包含数组索引。这段代码导致一个错误。

    X = 1:8;assignin(“基地”、“X (3:5) ', 1);

    要给数组中的特定元素赋值,请使用evalin函数。

    evalin(“基地”,“X(3:5) = 1”)

另请参阅

之前介绍过的R2006a