assignin
为指定工作区中的变量赋值
说明
示例
从函数中更新基础工作区变量
在当前工作文件夹下的文件中创建一个函数,用于添加两个数字并为基础工作区中的变量 fcnStatus
赋值。
function c = myAdd(a,b) c = a+b; str = sprintf('%s called with %d,%d (%s)',mfilename,a,b,char(datetime)); assignin('base','fcnStatus',str) end
在命令提示符下调用该函数。
n = myAdd(2,3)
n = 5
查看 myAdd
函数在基础工作区中为 fcnStatus
变量所赋的值。
fcnStatus
fcnStatus = 'myAdd called with 2,3 (17-Nov-2017 14:56:14)'
将对话框中的数据保存到基础工作区
在当前工作文件夹中的文件中创建一个函数,用于显示输入姓名和出生年份的对话框并计算到 2050 年时的年龄。assignin
函数将值导出到 MATLAB 工作区变量 name
和 age2050
中。
function mydialog prompt = {'Enter name:','Enter birth year:'}; answer = inputdlg(prompt); n = answer{1}; birthyear = str2double(answer{2}); a = 2050-birthyear; assignin('base','name',n); assignin('base','age2050',a); end
在命令提示符下运行该函数,输入数据,然后点击确定。
mydialog
在工作区浏览器中查看导出的值。
更改调用函数中的变量值
创建一个可将输入年龄更改为 42 的函数。在 localfcn
中调用 assignin
将更改主函数 updateAge
的工作区中的 a
值。
function updateAge(a) validateattributes(a,{'numeric'},{'scalar'}) fprintf('\tYour age: %d\n',a) localfcn fprintf('\tYour updated age: %d\n',a) end function localfcn assignin('caller','a',42) end
在命令提示符下调用主函数。
updateAge(37)
Your age: 37 Your updated age: 42
虽然本示例说明了如何将变量分配到调用方工作区,但最好的做法是让局部函数 localfcn
返回更新后的年龄作为输出参数。
将函数句柄分配给指定工作区中的变量
在当前工作文件夹下的文件中创建一个函数,用于查找随机数组的最小值。assignfh
局部函数将函数句柄 fh
分配给 minRand
的工作区。minRand
函数使用输入 n
计算 fh
。
function m = minRand(n) assignfh A = fh(n) m = min(A(:)); end function assignfh fh = @(dim)rand(dim); assignin('caller','fh',fh) end
使用输入值 2 调用该函数。
m = minRand(2)
A = 0.3486 0.1423 0.0419 0.0766 m = 0.0419
函数句柄的计算结果是一个 2×2 的随机数组。
创建另一个版本的函数,称为 minRand2
,用局部函数覆盖函数句柄定义中的 rand
函数。
与 minRand
示例相似,assignfh2
局部函数将 fh
分配给 minRand2
的工作区。assignfh2
函数使用名为 rand
的变量覆盖其工作区中的 rand
函数并创建函数句柄。这种行为与匿名函数一致 - 函数句柄是使用创建函数时可用的变量创建的。因此,在 minRand2
中对函数句柄进行计算后,会使用 n
对 assignfh2
中定义的 rand
数组进行索引。
function m = minRand2(n) assignfh2(n) A = fh(n) m = min(A(:)); end function assignfh2(n) rand = 13*ones(n); fh = @(dim)rand(dim); assignin('caller','fh',fh) end
使用输入值 2 调用该函数。
m = minRand2(2)
A = 13 m = 13
将匿名函数分配到调用方工作区时,MATLAB 将函数句柄的定义放入调用方工作区的变量中。调用 assignin
的函数将计算函数句柄。虽然这些示例说明了如何将变量分配到调用方工作区,但最好的做法是让局部函数 assignfh
返回函数句柄作为输出参数。
输入参数
ws
— 工作区
'base'
| 'caller'
工作区,指定为 'base'
或 'caller'
。
要在 MATLAB 基础工作区中赋值,请使用 'base'
。基础工作区存储您在 MATLAB 命令提示符下创建的变量,包括脚本创建的任何变量(假设您从命令行或编辑器中运行脚本)。
要为调用方函数的工作区中的变量赋值,请使用 'caller'
。调用方工作区是调用当前运行函数的函数工作区。例如,假设 funA
调用 funB
。funB
的调用方工作区就是 funA
。因此,您可以通过使用 assignin
并将工作区指定为 'caller'
,从 funB
中为 funA
中的变量赋值。
注意
为调用方工作区中的变量赋值可能会使代码变得更难以理解,产生意外结果(工作区中出现意外的变量或变量被重新定义),并对性能产生负面影响。最好的做法是让函数返回变量作为输出参数。
在以下情况下,基础工作区和调用方工作区相同:
您从命令提示符下调用函数,而主函数调用
assignin
。您从命令提示符下调用
assignin
。
数据类型: char
| string
var
— 变量名称
字符向量 | 字符串标量
变量名称,指定为字符向量或字符串标量。如果指定的工作区中不存在 var
,assignin
函数将创建它。
数据类型: char
| string
val
— 值
标量 | 数组
变量的值,指定为标量或数组值。val
可以是任何数据类型,并且可以包含 MATLAB 表达式。
如果需要计算变量的值,MATLAB 会在包含 assignin
调用的函数中进行表达式计算,而不是在 ws
指定的工作区中进行计算。如果 val
是函数句柄,则它在调用 assignin
的函数中必须是可计算的。
示例: 5
示例: 'hello'
示例: rand(3,7)
示例: @cos
提示
assignin
函数不会为数组的特定元素赋值。因此,var
不能包含数组索引。以下代码将导致错误。X = 1:8; assignin('base','X(3:5)',-1);
要为数组的特定元素赋值,请使用
evalin
函数。evalin('base','X(3:5) = -1')
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)