gpt4 book ai didi

namespaces - 更改当前命名空间中使用关联对象的名称

转载 作者:行者123 更新时间:2023-12-04 16:52:58 25 4
gpt4 key购买 nike

我觉得这必须是重复的,但我似乎无法在任何地方找到它,而且通过非常快速的谷歌搜索我没有得到任何东西。

有没有办法更改模块中东西的名称,使其不与本地(或全局)的名称冲突?考虑这个例子:

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

最佳答案

您需要重命名:

[luser@cromer stackoverflow]$ cat ren.f90
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, local_name => x, namespacefoo => foo
real x
call foo() !should print "foo is the new bar"
call namespacefoo() !somehow call module namespace's version of foo
end program main
[luser@cromer stackoverflow]$ nagfor ren.f90
NAG Fortran Compiler Release 5.3.1 pre-release(904)
Warning: ren.f90, line 17: X explicitly imported into MAIN (as LOCAL_NAME) but not used
Warning: ren.f90, line 17: Unused local variable X
[NAG Fortran Compiler normal termination, 2 warnings]
[luser@cromer stackoverflow]$ ./a.out
foo is the new bar :)
foo!

当然,如果可能的话,最好对模块保密,以避免发生这种事情

关于namespaces - 更改当前命名空间中使用关联对象的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14279259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com