2013-04-12 3 views
1

Я хотел бы улучшить читаемость моих fortran-кодов с помощью OOP. В итоге я получаю довольно сложные производные типы, например: 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 но ошибка компиляции прибудет, который гласит:

Error: Syntax error in USE statement

+2

ЗАКАНЧИВАТЬ 'associate' конструкцию. – eriktous

+0

@eriktous: вы должны добавить, что в качестве реального ответа мне кажется, что это наиболее подходящее решение. – sigma

+0

@sigma: Да, сделаю. У меня было мало времени, когда я написал это, поэтому сделал это в комментарии, чтобы быстро помочь OP, наполовину надеясь, что кто-то напишет правильный ответ. – eriktous

ответ

3

Вы можете использовать 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 
3

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

subroutine test(a) 
... 
end subroutine 

и затем вызвать

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

И, хотя я пишу, когда вы переименовываете предприятие в заявление use, форма составляет

local-name => use-name 

и не так, как у вас есть,

use-name => local-name 
+0

Спасибо, но это% b% c% d% e можно использовать абсолютно везде в коде. Разве нет более «модульно-ориентированного» способа? – max

Смежные вопросы