主要内容

assignin

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

描述

例子

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

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

assignin函数对以下任务很有用:

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

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

例子

全部折叠

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

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

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

n = myAdd(2,3)
N = 5

的值fcnStatus变量。myAdd在基本工作空间中分配的函数。

fcnStatus
fcnStatus = 'myAdd已调用2,3(2017年11月17日14:56:14)'

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

函数Mydialog prompt = {输入的名字:““输入出生年份:”};答案= inputdlg(提示符);N = answer{1};生日= str2double(答案{2});A = 2050年生日;assignin (“基地”“名字”n);assignin (“基地”“age2050”,);结束

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

mydialog

对话框截图。

在Workspace浏览器中查看导出的值。

创建一个函数,将输入年龄更改为42岁。呼唤assigninlocalfcn的值。一个在main函数的工作空间中,updateAge

函数updateAge (a) validateattributes (a, {“数字”},{“标量”})流('\ t年龄:%d\n',a) localfcn fprintf('\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(:));结束函数Assignfh fh = @(dim)rand(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);Fh = @(dim)rand(dim);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('base','X(3:5) = -1')

版本历史

R2006a之前介绍

另请参阅