fortran:在变量在内存中*之后*标识变量的内在类型
我对fortran有点陌生,是从Python、R和SAS开始学习的。在所有这些语言中,数据类型格式都嵌入到输出函数中,但fortran需要(除其他外)为正在编写的每个变量指定一个明确的格式指示符。我希望通过利用变量内省动态构建格式字符串,让fortran告诉我数据类型以及适用的属性(种类、LEN等)。这种自省还将有助于构建普遍适用的程序子单元 在Python和R的OO世界中,这是一个微不足道的查询。例如,在Python中测试值是否为字符串只是fortran:在变量在内存中*之后*标识变量的内在类型,fortran,introspection,Fortran,Introspection,我对fortran有点陌生,是从Python、R和SAS开始学习的。在所有这些语言中,数据类型格式都嵌入到输出函数中,但fortran需要(除其他外)为正在编写的每个变量指定一个明确的格式指示符。我希望通过利用变量内省动态构建格式字符串,让fortran告诉我数据类型以及适用的属性(种类、LEN等)。这种自省还将有助于构建普遍适用的程序子单元 在Python和R的OO世界中,这是一个微不足道的查询。例如,在Python中测试值是否为字符串只是 isinstance('foo',basestrin
isinstance('foo',basestring)
当然还有其他方法。无论如何,我无法动摇这样一个想法,即fortran中必须存在这样一个内在的查询。到目前为止,我所看到的都是无法区分整个实数和整数的方法
其他人建议在READ
语句中使用IOSTAT
参数。我还没有弄明白如何利用这个语句来处理内存中已经存在的变量。(此时,我只遇到了将READ
语句与从键盘或硬盘上的文件读取结合使用的情况。)
有人告诉我,我在什么地方疏忽了。我觉得这种能力必须存在。谢谢。此功能不存在。您总是知道您使用的变量是什么类型的。至少是声明的类型。对于多态类型,您必须使用
选择类型
来获取实际类型,但同样,您在编译时就知道了类型
您可以使用gw.d
或g0
描述符对内部类型进行通用格式化。您不需要考虑它属于什么类型的数字。对于用户定义的派生类型,可以定义自己的I/O例程
对于非常简单的I/O,您可以使用列表定向I/O,例如
print *, x
read(*,*) x
write(*,*) x
当你可以使用它的时候有一些限制,你没有太多的行为控制
否则,我不认为这种能力显然必须存在于OO语言中。您所说的两种语言(R、Python)都是动态类型的,因此对此有更大的需求。在C++98中有
typeid()
,但大多数人不需要它。此功能不存在。您总是知道您使用的变量是什么类型的。至少是声明的类型。对于多态类型,您必须使用选择类型
来获取实际类型,但同样,您在编译时就知道了类型
您可以使用gw.d
或g0
描述符对内部类型进行通用格式化。您不需要考虑它属于什么类型的数字。对于用户定义的派生类型,可以定义自己的I/O例程
对于非常简单的I/O,您可以使用列表定向I/O,例如
print *, x
read(*,*) x
write(*,*) x
当你可以使用它的时候有一些限制,你没有太多的行为控制
否则,我不认为这种能力显然必须存在于OO语言中。您所说的两种语言(R、Python)都是动态类型的,因此对此有更大的需求。在C++98中有
typeid()
,但大多数人不需要它。此功能不存在。您总是知道您使用的变量是什么类型的。至少是声明的类型。对于多态类型,您必须使用选择类型
来获取实际类型,但同样,您在编译时就知道了类型
您可以使用gw.d
或g0
描述符对内部类型进行通用格式化。您不需要考虑它属于什么类型的数字。对于用户定义的派生类型,可以定义自己的I/O例程
对于非常简单的I/O,您可以使用列表定向I/O,例如
print *, x
read(*,*) x
write(*,*) x
当你可以使用它的时候有一些限制,你没有太多的行为控制
否则,我不认为这种能力显然必须存在于OO语言中。您所说的两种语言(R、Python)都是动态类型的,因此对此有更大的需求。在C++98中有
typeid()
,但大多数人不需要它。此功能不存在。您总是知道您使用的变量是什么类型的。至少是声明的类型。对于多态类型,您必须使用选择类型
来获取实际类型,但同样,您在编译时就知道了类型
您可以使用gw.d
或g0
描述符对内部类型进行通用格式化。您不需要考虑它属于什么类型的数字。对于用户定义的派生类型,可以定义自己的I/O例程
对于非常简单的I/O,您可以使用列表定向I/O,例如
print *, x
read(*,*) x
write(*,*) x
当你可以使用它的时候有一些限制,你没有太多的行为控制
否则,我不认为这种能力显然必须存在于OO语言中。您所说的两种语言(R、Python)都是动态类型的,因此对此有更大的需求。在C++98中有
typeid()
,但大多数人不需要它。如何使用接口为各个类型绑定例程/函数呢?
?为什么不使用g(或g0)描述符?通用接口可以工作,尽管我认为没有必要。我不知道OP在IOSTAT
中的意思。READ
语句有一个IOSTAT
参数,如果在输入过程中发生错误,该参数被设置为非零的值(确切数字取决于错误和处理器)。它在这种情况下很有用,因为您可以指定信息的格式