9评估

通常,只需在Octave提示下输入表达式,或要求Octave解释保存在文件中的命令,即可计算表达式。

有时,您可能会查找有必要对已计算并存储在字符串中的表达式进行求值,这正是eval函数允许您这样做。

 
eval (try)
eval (try, catch)
[var1, …] = eval (…)

分析字符串try并将其被认为是Octave程序。

如果执行失败,请计算可选字符串catch.

字符串try在当前上下文中进行评估,因此任何结果在之后都可用eval返回。

以下示例创建变量A在当前起作用空间中近似值为 pi (3.1416)。

eval ('A = acos (-1);');

如果在评估过程中出现错误try然后catch字符串,如下例所示:

eval ('error ("This is a bad example");',
      'printf ("This error occurred:\n%s\n", lasterr ());');
     -| This error occurred:
        This is a bad example

除了创建变量用于try代码的一部分之外,将结果赋值给变量更加方便。第一个例子可以写成

A = eval ('acos (-1);');

编程注意事项:如果您仅使用eval作为一种错误捕获机制,而不是用于执行任意代码字符串,请考虑使用try/catch块或unwind_protect/unwind_protect_cleanup块。 这些技术具有更高的性能,并且不会像评估任意代码那样引入安全考虑。

详见: evalin, evalc, assignin, feval, try, unwind_protect.

广告

这里的evalc函数还捕获从求值表达式返回的任何控制台输出。

 
s = evalc (try)
s = evalc (try, catch)
[~, var1, …] = evalc (…)

分析和评估字符串try就好像它是一个Octave程序,同时将输出捕获到返回变量中s.

如果执行失败,请计算可选字符串catch.

此函数的行为类似eval,但通常会写入控制台的任何输出或警告消息都会被捕获并以字符串形式返回s.

如果第一个输出s~忽略,那么实际的代码运行的(不是文本接收的)结果 将赋值给输出变量 var1, var2, 等.

例1:

s = evalc ("t = 42"), t
  ⇒ s = t =  42

  ⇒ t =  42

例2:

[~, p] = evalc ("pi")
  ⇒ p = 3.1416

编程注意: diary在执行此函数时被禁用。 当使用system时,任何外部程序的输出均 被捕获,除非它们的输出被system 函数本身捕获。

详见: eval, diary.

广告

版权所有 © 2024-2025 Octave中文网

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