假设您有一个包含大量变量、函数和子例程的 Fortran 90 模块。在您的USE
陈述中,您遵循哪种约定:
- 使用语法显式声明您正在使用哪些变量/函数/子例程
, only :
,例如USE [module_name], only : variable1, variable2, ...
? - 插入毯子
USE [module_name]
?
一方面,该only
子句使代码更加冗长。但是,它会迫使您在代码中重复自己,并且如果您的模块包含大量变量/函数/子例程,事情就会开始变得不规则。
这是一个例子:
module constants
implicit none
real, parameter :: PI=3.14
real, parameter :: E=2.71828183
integer, parameter :: answer=42
real, parameter :: earthRadiusMeters=6.38e6
end module constants
program test
! Option #1: blanket "use constants"
! use constants
! Option #2: Specify EACH variable you wish to use.
use constants, only : PI,E,answer,earthRadiusMeters
implicit none
write(6,*) "Hello world. Here are some constants:"
write(6,*) PI, &
E, &
answer, &
earthRadiusInMeters
end program test
更新 希望有人说“Fortran?只需用 C# 重新编码!” 所以我可以否决你。
更新
我喜欢Tim Whitcomb 的回答,它将 FortranUSE modulename
与 Python 的from modulename import *
. 之前在 Stack Overflow 上的一个话题:
-
- Mark Roddy
在回答中提到:
不要使用“从模块导入 *”。对于任何合理的大型代码集,如果您“导入 *”,您可能会将其固定到模块中,无法删除。这是因为很难确定代码中使用的哪些项目来自“模块”,这使得它向东到达您认为不再使用导入但很难确定的地步。
- Mark Roddy
在回答中提到:
-
- dbr 的答案包含
不要这样做 from x import * - 它使您的代码很难理解,因为您无法轻易看到方法的来源(from x import *; from y import *; my_func() - my_func 定义在哪里?)
- dbr 的答案包含
因此,我倾向于达成共识,即通过以下方式明确说明我在模块中使用的所有项目
USE modulename, only : var1, var2, ...
正如Stefano Borini所说,
[如果]你有一个太大的模块,以至于你不得不只添加,这意味着你的模块太大了。拆分它。