假设我有这个简单的类:
Module Foo
...
character(len=3), parameter :: describe_Foo=(/'BAR', 'BED', 'BOD'/)
...
type :: A
real :: value
integer :: descriptor
contains
procedure :: getter
procedure :: setter
...
end type A
contains
function writetype(self,...)
...
write(writetype,*) self%value, describe_foo(self%descriptor)
end function writetype
...
end module Foo
如何将其接口定义为“write”,以便每次将此类型传递给 write 语句时,它都会输出类方法定义的字符串writetype
。
换句话说,用 Python 的说法,我可以实现__str__()
方法的等价物吗?
我发现诱人的花絮表明这是可能的,请参阅用户定义的派生类型输入/输出过程 (Fortran 2003)和用户定义的派生类型输入/输出过程接口 (Fortran 2003)。这些文档提供了足够的信息来编写我需要的方法,但我仍然不清楚如何定义接口或过程规范,以便发生我想要的行为。
示例应用:
program test
...
type(A) :: bartype, bedtype
...
bartype=A(120.0,1)
bedtype=A(102.0,2)
write(*,*) bartype,bedtype
end program test
期望的输出:
>test.exe
120.0000 BAR
102.0000 BED