我不知道如何为类定义简单的构造函数。我想做的是在mytype
中分配一个数组,然后在主程序中填充它。
我有什么?
module types
implicit none
type mytype
real, allocatable :: someArray(:)
end type mytype
interface
module procedure :: init
end interface
contains
subroutine init(this)
class(mytype), intent(inout) :: this
allocate( this%someArray(5) )
end subroutine init
end module types
program test
use types
implicit none
type(mytype) :: array
call array%init
do i=1, 5
array%someArray(i) = real(i)
print *, array%someArray(i)
end do
end program test
编译时出现错误
错误:(1)处的MODULE PROCEDURE必须在通用模块接口中
那是什么意思?如何定义通用模块接口?
谢谢!
答案 0 :(得分:2)
用户提供的构造函数的语言模型是具有与类型相同的标识符的泛型函数,仅返回该类型的对象。除了具有与类型同名的泛型之外,这没什么特别的。
const mapDispatchToProps = (dispatch) => {
return {
...bindActionCreators({appSubmitStart, appSubmitStop}, dispatch),
dispatch
};
};
(鉴于该语言的其他方面,例如参数化类型,数组构造函数,自动分配甚至内置结构构造函数的开箱即用功能,该示例在某种程度上毫无意义。)
来自编译器的错误消息可能意味着引用通用接口,因为仅在通用接口块中允许使用过程语句。
特定类型绑定过程引用-语法为module types
implicit none
type mytype
real, allocatable :: someArray(:)
end type mytype
interface mytype
module procedure :: init
end interface
! init would typically be private.
contains
function init()
type(mytype) :: this
allocate( this%someArray(5) )
! Non-pointer function result must be defined.
this%someArray = 0
end function init
end module types
program test
use types
implicit none
type(mytype) :: x
x = mytype()
do i=1, 5
x%someArray(i) = real(i)
print *, x%someArray(i)
end do
end program test
的事物-通常在以下情况下使用:父类型具有带有特定签名的方法(伪参数集,禁止传递的参数)的父类型,并且您想要覆盖扩展中的该方法,即调用具有相同签名的其他过程。构造函数不适合这种情况-通常需要传递给构造函数的信息(即调用的签名)是特定于类型的。