我对Fortran有点新意,从Python,R和SAS来到它。在所有这些语言中,数据类型格式化都嵌入在输出函数中,但fortran需要(除其他外)每个正在写入的变量的显式格式指示符。我想通过利用变量内省来动态构建格式字符串,让fortran告诉我数据类型是什么,以及适用的属性(KIND,LEN等)。这种反省也有助于构建普遍适用的程序子单元。
在Python和R的OO世界中,这是一个微不足道的探究。例如,测试值是否是Python中的字符串只是......
isinstance('foo',basestring)
当然还有其他方法。无论如何,我只是不能动摇在fortran中必须存在这种内在探究的想法。到目前为止,我所看到的是无法区分整个实际值和整数的方法。
其他人建议在IOSTAT
语句中使用READ
参数。我还没有弄清楚如何将此语句用于已经存在于内存中的变量。 (此时,我只遇到使用READ
语句以及从键盘读取或硬盘驱动器上的文件。)
有人请告诉我,我在某个地方做了一个令人震惊的疏忽。我觉得这种能力必须存在。感谢。
答案 0 :(得分:3)
此功能不存在。您始终知道您正在使用的变量是什么类型。至少是声明的类型。对于多态类型,您必须使用select type
来获取实际类型,但在编译时再次知道类型。
您可以使用gw.d
或g0
描述符进行内在类型的通用格式化。您不需要考虑它属于哪种类型的号码。对于用户定义的派生类型,可以定义自己的I / O例程。
对于非常简单的I / O,您可以使用列表导向的I / O,例如,
print *, x
read(*,*) x
write(*,*) x
对何时使用它有一些限制,而且你对行为没有太多控制。
否则我不认为这种能力显然必须存在于OO语言中。您所说的两种语言(R,Python)都是动态类型的,因此对此有更大的需求。在C ++ 98中有typeid()
,但大多数人不需要它。