在 C / C++ 语言中,可以使用宏或所谓的“每处理器指令”来指示编译器应如何读取代码。#def
, #ifdef
, #ifndef
, #else
, ...的简单命令#endif
使编译器能够检查操作系统、编译器和其他环境信息。我知道 Octave 和 Scilab 是解释性语言,但我想知道是否有任何方法可以告诉解释器在加载脚本时替换部分脚本?例如,我可以编写一个基于 Scilab 语法注释的代码,//
然后指示解释器将它们作为 Octave 的注释语法读取为#
or%
吗?这似乎是 Scilab Octave 间兼容性的主要问题之一。
如果有一种方法可以指示口译员检查口译员的信息 Scilab/ScicoLab/Octave/FreeMat,Julia... 和版本... 然后根据这些信息有一些#ifdef
#endif
块... 然后可以写与上述多个解释器兼容的代码。如果您能告诉我加载时间指令是否可行,我将不胜感激,如果不可行,是否/如何编写与 Octave 和 Scilab 兼容的代码?
PS1不同的方法是:
- 具有常规
if then elseif else end
语句,包括跨不同解释器的有效语法并具有独特的结果。正如以下答案中所建议的那样。 - 使用
gets
,exec
,execstr
从 Scilab 端加载.m
文件。可以做一些正则表达式来清理代码。Octave 确实有类似的 xml#<include>...</include>
- 有一个像这样的定制
import
功能,用于将 MATLAB 代码导入 Octave
PS2 Octave 有version()
功能,Scilab /ScicosLab 有getversion()
,Julia 有versioninfo
and VERSION
,FreeMat
也有version
功能。也许也可以使用。
PS3已经有scilab 的Matlab/Octave 兼容性工具箱。还有Sci cosim可以使用 TCP 端口将变量从 Scilab 工作区导入 Octave。