提问人:Oier Arcelus 提问时间:11/12/2023 更新时间:11/12/2023 访问量:75
Fortran 中的可选参数,当函数调用的签名最初未知时
Optional arguments in Fortran, when the signature of the function call is not initially known
问:
我有一个 fortran 子例程,它采用许多可选参数,我正在尝试为它构建一个 python 接口
subroutine myfunc(mandatory, A, B, C, result)
integer, intent(in) :: mandatory
integer, optional, intent(in) :: A, B, C
integer, intent(out) :: result
end subroutine myfunc
在 python 函数调用中,给出了必需参数,而可选参数在字典中作为键/值对给出。与 python 接口的 fortran 函数接受 python 调用的参数,并检查特定键是否存在并将其存储在布尔变量中。
python 调用如下所示
result = pymyfunc(1, {'A': 1, 'C': 2})
接口函数将保存布尔值
is_A = .true.
is_B = .false.
is_C = .true.
然后,它是关于在 if/else 块中构建所有可能的可选值组合的逻辑,以适当地调用 fortran 例程。在这种情况下:
...
else if (is_A .and. .not. is_B .and. is_C) then
call myfunc(mandatory,A=A,C=C,result)
...
现在,这个 if/else 块可以管理 3 个可选参数。但是你可以看到,在存在更多可选参数的情况下,这种情况会如何爆发。
我想知道是否有更智能的方法来解决这个问题。我可能遗漏了一些关于 fortran 如何处理调用签名的函数的东西。
答: 暂无答案
评论
myfunc
B
B
myfunc
if (present(var)) then
result
A
result
mandatory
B
A
POINTER
OPTIONAL
ASSOCIATED