9.2不同背景下的评估

在计算表达式之前,需要替换表达式中使用的变量的值。这些存储在符号表中。每当解释器启动一个新函数时,它都会保存当前符号表并创建一个新的符号表,并使用函数参数列表和几个预定义的变量对其进行初始化,例如函数输入变量数。函数内的表达式使用新的符号表。

有时你想写一个函数,这样当你调用它时,它会在你自己的上下文中修改变量。这允许您使用按名称传递的函数样式,这类似于在C等编程语言中使用指针。

考虑一下你可能会如何写作拯救加载asm文件。例如

函数create_data x=linspace(0,10,10);y=sin(x);保存mydata x yendfunction

具有伊瓦林,你可以写拯救如下所示:

函数保存(文件,名称1,名称2)f=打开保存文件(文件);save_var(f,name1,evalin(“caller”,name1));save_var(f,name2,evalin(“caller”,name2));结束函数

在这里呼叫者创建数据函数和名称1是字符串x,简单地计算为的值x.

稍后您希望从中加载回值mydata在不同的背景下:

函数process_data加载mydata。。。做工作。。。结束函数

具有assignin,你可以写加载如下所示:

函数加载(文件)f=open_load_file(文件);[名称,val]=加载_var(f);assignin(“呼叫者”,名称,val);[名称,val]=加载_var(f);assignin(“呼叫者”,名称,val);结束函数

在这里呼叫者进程数据作用

您可以在命令提示符下使用上下文设置和使用变量基础而不是呼叫者’.

这些函数在实践中很少使用。一个例子是失败密码’, ‘图案’)计算的函数密码,并检查它生成的错误消息是否与给定的模式匹配。其他示例,例如拯救加载用C++编写,其中所有Octave变量都在呼叫者上下文和伊瓦林不需要。

 
: evalin (context, try)
: evalin (context, try, catch)

喜欢eval,但表达式是在上下文中计算的上下文,可以是呼叫者基础.

详见: eval, assignin.

 
: assignin (context, varname, value)

赋值value变量名在上下文中上下文,可以是基础呼叫者.

详见: 伊瓦林.


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号