如何逐行执行八度代码

时间:2013-10-01 16:26:40

标签: eval octave

如果我启动一个八度交互式shell,我可以输入:

octave:1> function y = foo(x)
> y = x + 2;
> endfunction
octave:2> foo(7)
ans = 9

解释器知道等待函数定义的其余部分。

然而,如果我这样做

octave:1> eval("function y = foo(x)");
octave:2> eval("y = x + 2;");
octave:3> eval("endfunction");

它评估每一行,就好像它一个人一样。所以它定义了一个什么都不做的函数foo,并为后两行提供了错误。

有没有办法让eval与解释器一样操作?最后,我想创建一个执行另一个脚本的八度脚本,但能够在其间执行其他操作。有没有办法告诉eval等待命令的其余部分(交互式环境的方式)?或者,有没有办法以编程方式向交互式解释器提供命令?

谢谢。

1 个答案:

答案 0 :(得分:1)

要回答您的确切问题,我会看到两种直接的方法:

octave> eval ("function y = foo(x) ...
y = x + 2; ...
endfunction")
octave> eval ("function y = foo(x)\n y = x + 2;\n endfunction")

问题在于你不能在多个eval中拆分每一行,这没有意义。您希望传递包含所有代码的单个字符串。此外,您可以使用source函数从其他文件执行代码。

在不知道您正在尝试做什么的所有细节的情况下,我猜你可以让你的代码使用input等待来自其他代码的输入。或者只需将其他脚本转换为函数,然后从主脚本中调用它们。