鍵入建構函式
通過使用介面過載型別名稱,可以為派生型別建立自定義建構函式。這樣,在構造該型別的物件時,可以使用與元件不對應的關鍵字引數。
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)