Локально переименовать тип, производный от Fortran, загруженный из модуля.

Я хотел бы улучшить читаемость моих кодов Fortran с помощью ООП. Я получаю довольно сложные производные типы, например: a%b%c%d%e, определенный в модуле mymod.

Теперь в подпрограмме я делаю

subroutine test
    use mymod, only: a
    ! lots of unrelevant stuff, especially with a%b%c%d%e.
end subroutine

Моя проблема заключается в следующем: я хотел бы переименовать в этой конкретной подпрограмме a%b%c%d%e в простое newname.

Я тестировал, например: use mymod, only: a%b%c%d%e => newname, но получаю ошибку компиляции, которая гласит:

Ошибка: синтаксическая ошибка в операторе USE


person max    schedule 12.04.2013    source источник
comment
Проверьте конструкцию associate.   -  person eriktous    schedule 12.04.2013
comment
@eriktous: Вы должны добавить, что в качестве реального ответа мне кажется, что это наиболее подходящее решение.   -  person sigma    schedule 12.04.2013
comment
@sigma: Да, подойдет. У меня было мало времени, когда я писал это, поэтому я превратил его в комментарий, чтобы быстро помочь ОП, наполовину надеясь, что кто-то другой напишет правильный ответ.   -  person eriktous    schedule 12.04.2013


Ответы (2)


Для этого можно использовать конструкцию associate.

subroutine test
    use :: mymod, only: a
    associate(newname => a%b%c%d%e)
        ! lots of unrelevant stuff, now using newname.
    end associate
end subroutine
person eriktous    schedule 12.04.2013

Возможно, лучшим подходом является передача аргумента через список аргументов подпрограммы, и в этом случае вы можете использовать любое локальное имя, которое вам нравится:

subroutine test(a)
...
end subroutine

а потом позвони

call subroutine test(a%b%c%d%e)

И, пока я пишу, когда вы переименовываете объект в операторе use, форма

local-name => use-name 

а не как у вас,

use-name => local-name
person High Performance Mark    schedule 12.04.2013
comment
Спасибо, но этот a%b%c%d%e можно использовать абсолютно везде в коде. Разве нет более модульно-ориентированного способа? - person max; 12.04.2013
comment
Например, его нельзя использовать в спецификации use, only. - person Rodrigo Rodrigues; 21.09.2018