Fortran 类型构造器

示例

通过使用接口来重载类型名称,可以为派生类型创建自定义构造函数。这样,在构造该类型的对象时,可以使用不对应于组件的关键字参数。

module ball_mod

  implicit none

  ! only export the derived type, and not any of the

  ! constructors themselves

  private

  public :: ball

  type :: ball_t

     real :: mass

  end type ball_t

  ! Writing an interface overloading 'ball_t' allows us to

  ! overload the type constructor

  interface ball_t

     procedure :: new_ball

  end interface ball_t

contains

  type(ball_t) function new_ball(heavy)

    logical, intent(in) :: heavy

    if (heavy) then

       new_ball%mass = 100

    else

       new_ball%mass = 1

    end if

    

  end function new_ball

  

end module ball_mod

program test

  use ball_mod

  implicit none

  type(ball_t) :: football

  type(ball_t) :: boulder

  

  ! sets football%mass to 4.5

  football = ball_t(4.5)

  ! calls 'ball_mod::new_ball'

  boulder = ball_t(heavy=.true.)

end program test

与使用单独的初始化例程相比,它可以用于制作更整洁的API:

subroutine make_heavy_ball(ball)

  type(ball_t), intent(inout) :: ball

  ball%mass = 100

end subroutine make_heavy_ball

...

call make_heavy_ball(boulder)

           

以上是 Fortran 类型构造器 的全部内容, 来源链接: utcz.com/z/343150.html

回到顶部