如果我启动一个八度交互式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等待命令的其余部分(交互式环境的方式)?或者,有没有办法以编程方式向交互式解释器提供命令?
谢谢。
答案 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
等待来自其他代码的输入。或者只需将其他脚本转换为函数,然后从主脚本中调用它们。