Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 在本地重命名从模块加载的Fortran派生类型_Module_Fortran_Derived Types - Fatal编程技术网

Module 在本地重命名从模块加载的Fortran派生类型

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

我想通过使用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 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可能在代码中的任何地方都可以使用。难道没有一种更面向模块的方法吗?例如,它不能用于一种用途,只能用于规范。