Module 在本地重命名从模块加载的Fortran派生类型
我想通过使用OOP来提高Fortran代码的可读性。 我最终得到了相当复杂的派生类型,例如:模块mymod中定义的a%b%c%d%e 现在,在一个子程序中Module 在本地重命名从模块加载的Fortran派生类型,module,fortran,derived-types,Module,Fortran,Derived Types,我想通过使用OOP来提高Fortran代码的可读性。 我最终得到了相当复杂的派生类型,例如:模块mymod中定义的a%b%c%d%e 现在,在一个子程序中 subroutine test use mymod, only: a ! lots of unrelevant stuff, especially with a%b%c%d%e. end subroutine 我的问题如下:在这个特定的子例程中,我想将%b%c%d%e重命名为一个简单的新名称 例如,我测试了:use mymo
subroutine test
use mymod, only: a
! lots of unrelevant stuff, especially with a%b%c%d%e.
end subroutine
我的问题如下:在这个特定的子例程中,我想将%b%c%d%e重命名为一个简单的新名称
例如,我测试了:use mymod,only:a%b%c%d%e=>newname,但我得到一个编译错误,该错误声明:
错误:USE语句中出现语法错误
您可以使用关联构造来执行此操作
subroutine test
use :: mymod, only: a
associate(newname => a%b%c%d%e)
! lots of unrelevant stuff, now using newname.
end associate
end subroutine
您可以使用关联构造来执行此操作
subroutine test
use :: mymod, only: a
associate(newname => a%b%c%d%e)
! lots of unrelevant stuff, now using newname.
end associate
end subroutine
可以说,更好的方法是通过子例程的参数列表传递参数,在这种情况下,您可以使用任何您喜欢的本地名称:
subroutine test(a)
...
end subroutine
然后打电话
call subroutine test(a%b%c%d%e)
在我编写时,当您重命名use语句中的实体时,表单是
local-name => use-name
而不是像你说的那样
use-name => local-name
可以说,更好的方法是通过子例程的参数列表传递参数,在这种情况下,您可以使用任何您喜欢的本地名称:
subroutine test(a)
...
end subroutine
然后打电话
call subroutine test(a%b%c%d%e)
在我编写时,当您重命名use语句中的实体时,表单是
local-name => use-name
而不是像你说的那样
use-name => local-name
检查关联构造。@eriktous:你应该加上它作为一个真实的答案,在我看来这是最合适的解决方案。@sigma:是的,可以。我写这篇文章的时候时间不多,所以我把它写进了一篇评论来帮助OP快速完成,一半希望其他人能写出一个正确的答案。请查看关联结构。@eriktous:你应该把它作为一个真实的答案添加进去,在我看来这是最合适的解决方案。@sigma:是的,可以。我写这篇文章的时候时间不多,所以我把它写进了一条评论,以帮助OP快速完成,一半希望其他人能写出一个正确的答案。谢谢,但是这个a%b%c%d%e可能在代码中的任何地方都会用到。难道没有一种更面向模块的方法吗?例如,它不能用于一种用途,只能用于规范。谢谢,但这一a%b%c%d%e可能在代码中的任何地方都可以使用。难道没有一种更面向模块的方法吗?例如,它不能用于一种用途,只能用于规范。