在python中这样的语句:
sendEvent(withName, body)
很有道理,因为Python是一种解释器语言,我不希望python加载所有353个其他函数。
Fortran具有类似的构造:
from module import function354
我为什么要使用它?编译器仍然会创建一个* .mod文件,以编译所有功能。如果指定use module, only : function354
语句,在编译或运行时是否有任何性能优势?
我可以看到避免命名冲突可能会有所帮助,但除此之外,我并没有真正理解这一点。
答案 0 :(得分:6)
两个主要原因
use, only
是有助于此目的的有用补充use, only
是一个很好的功能,有助于提高代码的可读性您不仅需要快速的代码-可维护性至关重要,更重要的是正确性!
答案 1 :(得分:0)
有些人在评论中(正确地)指出 use rename => name
可以独立于 use, only
使用。像这样:
use module, f354 => function354
我保留答案,因为它可以作为 use
声明的补充信息,对降落在这里的人有用。
为了完整起见,use, only
还提供了另一个功能,即能够使用本地绑定的名称重命名导入的名称(仅不需要此功能,请参阅免责声明强> 高于)。
像这样:
use module, only: f354 => function354
事实证明,这在几个不同的场景中对我很有用:
当两个使用的模块提供具有相同名称的类型或函数时,解决特定名称的歧义。
示例:
use module1, only: m1_init => initialize
use module2, only: m2_init => initialize
当原始名称太长、太神秘或在您的程序中经常使用时,请使用短名称。
示例(来自 fgsl 和 lapack):
use fgsl, only: stride => fgsl_aux_vector_double_stride ! too long
use lapack, only: solve => dgesvx ! too cryptic
use iso_c_binding, only: i32 => c_int32_t, i64 => c_int64_t ! too frequent
使重构或使用条件编译/模板更容易:
示例(来自Fortran-lang/stdlib):
use iso_fortran_env, only: sp => real32, dp => real64, qp => real128
! If we decide later to use iso_c_binding instead of iso_fortran_env:
! use iso_c_binding, only: sp => c_float, dp => c_double, qp => c_float128