4
如何才能在fortran 90中實現此目標?我有一個常規的接受功能Fortran中的可選子程序90
subroutine foo(bar, mysub)
integer, intent(in) :: bar
interface
subroutine mysub(x)
integer :: x
end subroutine
end interface
call mysub(bar)
end subroutine
現在我想例程是可選現在
subroutine foo(bar, mysub)
integer, intent(in) :: bar
interface
subroutine mysub(x)
integer :: x
end subroutine
end interface
optional :: mysub
call mysub(bar)
end subroutine
,如果mysub是一個標準的可變var
我可以做類似
if (present(var)) then
l_var = var
else
l_var = <default value>
endif
但據我所知,我不能對可選的子程序執行相同的操作。在實踐中,這是不可能的
subroutine foo(bar, mysub)
integer, intent(in) :: bar
interface
subroutine mysub(x)
integer :: x
end subroutine
end interface
optional :: mysub
if (present(mysub)) then
l_mysub = mysub
else
l_mysub = default
endif
call mysub(bar)
end subroutine
因爲你不能聲明l_mysub。有沒有可能通過我不知道的一些技巧?是的,我當然可以做
if (present(mysub)) then
call mysub(bar)
else
call default(bar)
endif
,但我的情況比較複雜,我將不得不處處把這個檢查。考慮我有三個可選的子程序可以通過。