Octave:我应该如何为任何程序准备好全局常量?

Octave: How should I go about having global constants handy for any program?

我想要一个常量列表,以便在我编写的任何脚本或函数中使用。例如,我一直在将使用它的任何脚本的开头定义常量,如 hbar(普朗克常量)。

相反,我应该:

  1. 在脚本中创建常量列表并每次加载该脚本 我想用,
  2. 或在工作区中保存常量并加载它,
  3. 或者即使我关闭并重新打开 Octave,我是否可以拥有全局变量,
  4. 还是别的?

正如您所指出的,有几种方法可以解决这个问题。要解决您的第三个选项,它似乎最接近您想要的精神,您至少有两种处理方法。

1.) 如果变量需要可变。创建一个函数或脚本,将变量初始化为您希望它们成为的样子。我将参考 MATLAB 文档,但基本上应该是相同的。

function initglobals()
  global the_answer
  the_answer = 42;
end

然后任何时候你想在脚本中使用这些全局变量,你首先要向 Octave 表明你将把变量用作全局变量:

...
global the_answer
disp(the_answer) %prints 42
...

为了使它更有用,我建议生成一个启动脚本并放入您的 .octaverc docs。这个启动脚本可以调用这个函数来初始化你的全局变量。

2.) 如果全局变量应该是不可变的(例如,物理常数),您的另一个选择是定义一个函数,该函数 returns 您想要的值。

function [out] = the_answer()
  out = 42;
end

然后您可以简单地使用 the_answer 来访问您的常量。

在这两种情况下,您都需要将这些函数添加到您的路径中。创建您的函数集合并将它们放在某个地方,然后将该位置添加到您的路径中。 docs

如果您使用 GNU Octave,我建议您使用杂项包和函数 physical_constant,它已经包含 335 constants。你的情况:

[val, uncertainty, unit] = physical_constant ("Planck constant over 2 pi")
val =    1.0546e-34
uncertainty =    4.7000e-42
unit = J s

如果你不想这样,那就使用函数,而不是全局变量。