我觉得这必须是重复的,但我似乎无法在任何地方找到它,而且我没有通过非常快速的谷歌搜索得到任何东西。
有没有办法更改模块中的东西的名称,使其不与本地(或全局)的名称冲突?考虑这个例子:
module namespace
real x !some data
contains
subroutine foo()
write(0,*) "foo!"
end subroutine foo
end module
subroutine foo()
write(0,*) "foo is the new bar :)"
end subroutine
program main
use namespace
real x
call foo() !should print "foo is the new bar"
call namespacefoo() !somehow call module namespace's version of foo
end program main
上面的代码没有编译,因为x
没有定义。当然,如果我不想要一个名为 的局部变量x
,那么我可以use namespace, only: foo
,但是必须弄乱我的局部变量名称似乎有点麻烦。(作为旁注,我很确定我以前在only
声明的一部分中看到过一些魔法......)
为了那些也了解python的人的利益,我正在寻找类似于python的东西:
import namespace as other_namespace
或者我猜因为 Fortran 没有那种级别的命名空间控制:
from namespace import somefunc as otherfunc
from namespace import somedata as otherdata