fortran:在变量存入内存后识别变量*的内在类型

时间:2014-06-20 16:13:47

标签: fortran introspection

我对Fortran有点新意,从Python,R和SAS来到它。在所有这些语言中,数据类型格式化都嵌入在输出函数中,但fortran需要(除其他外)每个正在写入的变量的显式格式指示符。我想通过利用变量内省来动态构建格式字符串,让fortran告诉我数据类型是什么,以及适用的属性(KIND,LEN等)。这种反省也有助于构建普遍适用的程序子单元。

在Python和R的OO世界中,这是一个微不足道的探究。例如,测试值是否是Python中的字符串只是......

isinstance('foo',basestring)

当然还有其他方法。无论如何,我只是不能动摇在fortran中必须存在这种内在探究的想法。到目前为止,我所看到的是无法区分整个实际值和整数的方法。

其他人建议在IOSTAT语句中使用READ参数。我还没有弄清楚如何将此语句用于已经存在于内存中的变量。 (此时,我只遇到使用READ语句以及从键盘读取或硬盘驱动器上的文件。)

有人请告诉我,我在某个地方做了一个令人震惊的疏忽。我觉得这种能力必须存在。感谢。

1 个答案:

答案 0 :(得分:3)

此功能不存在。您始终知道您正在使用的变量是什么类型。至少是声明的类型。对于多态类型,您必须使用select type来获取实际类型,但在编译时再次知道类型。

您可以使用gw.dg0描述符进行内在类型的通用格式化。您不需要考虑它属于哪种类型的号码。对于用户定义的派生类型,可以定义自己的I / O例程。

对于非常简单的I / O,您可以使用列表导向的I / O,例如,

print *, x
read(*,*) x
write(*,*) x

对何时使用它有一些限制,而且你对行为没有太多控制。

否则我不认为这种能力显然必须存在于OO语言中。您所说的两种语言(R,Python)都是动态类型的,因此对此有更大的需求。在C ++ 98中有typeid(),但大多数人不需要它。