2013-04-12 32 views
1

我想通過使用OOP來提高我的Fortran代碼的可讀性。 我最終得到了相當複雜的派生類型,例如:a%b%c%d%e,在模塊mymod中定義。重命名localy從模塊加載的Fortran派生類型

現在,在一個子程序我做

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