0

如果我启动一个 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 与解释器一样运行?最终,我想创建一个 octave 脚本,它执行另一个脚本,但能够在两者之间做其他事情。有没有办法告诉 eval 等待命令的其余部分(交互环境的方式)?或者,有没有办法以编程方式将命令提供给交互式解释器?

谢谢你。

4

1 回答 1

1

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

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

问题是您不能将每一行拆分为多个evals,这没有任何意义。您想传递包含所有代码的单个字符串。此外,您可以使用该source函数从其他文件执行代码。

在不知道您要做什么的所有细节的情况下,我猜您可以使用您的代码input来等待其他代码的输入。或者只是把你的其他脚本变成函数,然后从你的主脚本中调用它们。

于 2013-10-02T11:59:54.513 回答