所以我刚刚拿起了一个用fortran90编写的项目。我习惯用 python 和 C 编码。
真正困扰我的是fortran90 中子程序的使用。在 fortran 中,人们使用子例程在子函数中设置父作用域的变量。这对我来说真的很不透明,因为如果代码变得更复杂,跟踪这些变量的变化会变得非常困难。我的意思是,比较这些片段:
subroutine big()
implicit none
integer :: a
a=1
call f()
print *,a
contains
subroutine f()
implicit none
a = 2
end subroutine f
end subroutine big
program hello
call big()
end program hello
2
同样,在 python 中,我可以避免覆盖 a:
def big():
a=1
def f():
a=2
f()
print(a)
big()
1
在 python 中,我不能简单地在子函数中设置 a (除非我使用了一个global
不好的做法),在 fortran 中我可以并且人们正在这样做。
- 在保护父范围变量的情况下编写现代 fortran 代码的正确方法/良好编码实践是什么?