首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于“仅使用a_module :a_subroutine”

关于“仅使用a_module :a_subroutine”
EN

Stack Overflow用户
提问于 2014-09-15 23:54:12
回答 1查看 529关注 0票数 0

有时我想在其他子例程中包含一个模块,但我只需要该模块中的几个子例程。它们之间的区别是什么

代码语言:javascript
复制
use a_module,  only: a_subroutine

或者简单地说

代码语言:javascript
复制
use a_module
EN

回答 1

Stack Overflow用户

发布于 2018-08-23 19:09:46

这是一个完整的答案,其中一些已经在评论中讨论过了。

来自Metcalf等人。(2011)第146页(领先的Fortran参考教科书),use a_module提供(重点补充):

相反,use a_module, only an_entity提供:

对模块中的实体的

访问仅当该实体...是指定的。

例如,use a_module等同于不推荐的python实践(例如,在2中):

代码语言:javascript
复制
from a_module import *

use a_module, only an_entity相当于首选的python实践:

代码语言:javascript
复制
from a_module import an_entity

不幸的是,推荐的python实践

代码语言:javascript
复制
import module [as name]

代码语言:javascript
复制
import module.submodule [as name]

代码语言:javascript
复制
import numpy as np
array = np.array([1, 2, 3])

正如注释和其他地方(例如3)所指出的,为了代码清晰和避免名称空间污染/名称冲突(“显式比隐式好”),显式导入(use a_module, only an_entity)比隐式导入(use a_module)更可取。

Metcalf等人。(2011)还请注意,如果您需要来自不同模块的两个同名实体,可以通过在本地(即仅在您的程序/模块中)重命名冲突实体中的一个(或两个)来避免名称冲突,例如

代码语言:javascript
复制
use stats_lib, only sprod => prod
use maths_lib, only prod

其中,来自stats_libprod使用名称sprod进行本地访问,而来自maths_libprod使用名称prod进行本地访问。

顺便说一句,Metcalf等人。(2011)还请注意:

如果作用域单元中没有对名称的引用,则允许名称冲突。

也就是说,您可以成功编译:

代码语言:javascript
复制
use stats_lib
use maths_lib

如果没有问题,两个模块的prod (或任何其他冲突的名称)都不会在您的程序/模块中使用。但是,由于上述原因,不推荐这样的做法。

1 Metcalf,M,Reid,J& Cohen,M。(2011)“现代Fortran解释”(牛津大学出版社)

2

3

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25852074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档