我需要编写在 Octave 和 MATLAB 中运行良好的代码。问题是它需要做一些 GUI 的东西,而 MATLAB 和 Octave 的处理方式完全不同。
有没有一种方法可以检测我是否正在运行 MATLAB 或 Octave,以便调用正确的函数?
我需要编写在 Octave 和 MATLAB 中运行良好的代码。问题是它需要做一些 GUI 的东西,而 MATLAB 和 Octave 的处理方式完全不同。
有没有一种方法可以检测我是否正在运行 MATLAB 或 Octave,以便调用正确的函数?
您可以使用以下测试将 Octave 与 MATLAB 区分开来:
isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
octave.org 官方网站上的 wiki 中也有提示。他们提出以下建议:
编辑:并非所有版本的 Matlab 都支持 '#' 注释,所以我将示例更改为使用 '%'。它适用于 Matlab R2018 (Linux) 和 Octave 4.2.2
function foo
%% fancy code that works in both
if (is_octave)
%% use octave super_powers
else
%% do it matlab way
end
%% fancy code that works in both
end
%% subfunction that checks if we are in octave
function r = is_octave ()
persistent x;
if (isempty (x))
x = exist ('OCTAVE_VERSION', 'builtin');
end
r = x;
end
例如,我会使用 ver 命令,它会产生:
在 MATLAB 中:
MATLAB 版本 7.7.0.471 (R2008b) 操作系统:Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686 Java VM 版本:Java 1.6.0_04 with Sun Microsystems Inc. Java HotSpot (TM) 客户端虚拟机混合模式
在八度:
GNU Octave 版本 3.0.5 GNU Octave 许可证:GNU 通用公共许可证 操作系统:Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686
另一种可能性是使用许可功能。
在 Matlab 中:
>> exist octave_config_info
ans =
0
在八度:
octave:3> exist octave_config_info
ans = 5