Octave:我应该如何为任何程序准备好全局常量?
Octave: How should I go about having global constants handy for any program?
我想要一个常量列表,以便在我编写的任何脚本或函数中使用。例如,我一直在将使用它的任何脚本的开头定义常量,如 hbar(普朗克常量)。
相反,我应该:
- 在脚本中创建常量列表并每次加载该脚本
我想用,
- 或在工作区中保存常量并加载它,
- 或者即使我关闭并重新打开 Octave,我是否可以拥有全局变量,
- 还是别的?
正如您所指出的,有几种方法可以解决这个问题。要解决您的第三个选项,它似乎最接近您想要的精神,您至少有两种处理方法。
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
如果你不想这样,那就使用函数,而不是全局变量。
我想要一个常量列表,以便在我编写的任何脚本或函数中使用。例如,我一直在将使用它的任何脚本的开头定义常量,如 hbar(普朗克常量)。
相反,我应该:
- 在脚本中创建常量列表并每次加载该脚本 我想用,
- 或在工作区中保存常量并加载它,
- 或者即使我关闭并重新打开 Octave,我是否可以拥有全局变量,
- 还是别的?
正如您所指出的,有几种方法可以解决这个问题。要解决您的第三个选项,它似乎最接近您想要的精神,您至少有两种处理方法。
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
如果你不想这样,那就使用函数,而不是全局变量。