有时我想在其他子例程中包含一个模块,但我只需要该模块中的几个子例程。它们之间的区别是什么
use a_module, only: a_subroutine或者简单地说
use a_module发布于 2018-08-23 19:09:46
这是一个完整的答案,其中一些已经在评论中讨论过了。
来自Metcalf等人。(2011)第146页(领先的Fortran参考教科书),use a_module提供(重点补充):
相反,use a_module, only an_entity提供:
对模块中的实体的
访问仅当该实体...是指定的。
例如,use a_module等同于不推荐的python实践(例如,在2中):
from a_module import *而use a_module, only an_entity相当于首选的python实践:
from a_module import an_entity不幸的是,推荐的python实践
import module [as name]或
import module.submodule [as name]import numpy as np
array = np.array([1, 2, 3])正如注释和其他地方(例如3)所指出的,为了代码清晰和避免名称空间污染/名称冲突(“显式比隐式好”),显式导入(use a_module, only an_entity)比隐式导入(use a_module)更可取。
Metcalf等人。(2011)还请注意,如果您需要来自不同模块的两个同名实体,可以通过在本地(即仅在您的程序/模块中)重命名冲突实体中的一个(或两个)来避免名称冲突,例如
use stats_lib, only sprod => prod
use maths_lib, only prod其中,来自stats_lib的prod使用名称sprod进行本地访问,而来自maths_lib的prod使用名称prod进行本地访问。
顺便说一句,Metcalf等人。(2011)还请注意:
如果作用域单元中没有对名称的引用,则允许名称冲突。
也就是说,您可以成功编译:
use stats_lib
use maths_lib如果没有问题,两个模块的prod (或任何其他冲突的名称)都不会在您的程序/模块中使用。但是,由于上述原因,不推荐这样的做法。
1 Metcalf,M,Reid,J& Cohen,M。(2011)“现代Fortran解释”(牛津大学出版社)
3
https://stackoverflow.com/questions/25852074
复制相似问题