在计算表达式之前,需要替换表达式中使用的变量的值。这些存储在符号表中。每当解释器启动一个新函数时,它都会保存当前符号表并创建一个新的符号表,并使用函数参数列表和几个预定义的变量对其进行初始化,例如nargin。函数内的表达式使用新的符号表。
有时你想写一个函数,这样当你调用它时,它会在你自己的上下文中修改变量。这允许您使用按名称传递的函数样式,这类似于在C等编程语言中使用指针。
考虑一下你可能会如何写作save和loadasm文件。例如
function create_data x = linspace (0, 10, 10); y = sin (x); save mydata x y endfunction
具有evalin,你可以写save如下所示:
function save (file, name1, name2)
f = open_save_file (file);
save_var (f, name1, evalin ("caller", name1));
save_var (f, name2, evalin ("caller", name2));
endfunction
在这里呼叫者是create_data函数和name1是字符串"x",简单地计算为的值x.
稍后您希望从中加载回值mydata在不同的背景下:
function process_data load mydata ... do work ... endfunction
具有assignin,你可以写load如下所示:
function load (file)
f = open_load_file (file);
[name, val] = load_var (f);
assignin ("caller", name, val);
[name, val] = load_var (f);
assignin ("caller", name, val);
endfunction
在这里呼叫者是process_data作用
您可以在命令提示符下使用上下文设置和使用变量基础而不是呼叫者’.
这些函数在实践中很少使用。一个例子是失败密码’, ‘图案’)计算的函数密码,并检查它生成的错误消息是否与给定的模式匹配。其他示例,例如save和load用C++编写,其中所有Octave变量都在呼叫者上下文和evalin不需要。
(context, varname, value) ¶赋值value到varname在上下文中context,可以是"base"或"caller".
详见: evalin.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2