変数、関数、サブルーチンののを含むFortran 90モジュールがあるとします。あなたが従わない大会あなたのUSE
声明では、:どのようにFortran 90モジュールのデータを使用する
- 明示的な
USE [module_name], only : variable1, variable2, ...
として、, only :
の構文で使用しているどの変数/関数/サブルーチンを宣言? - ブランケットを挿入
USE [module_name]
?
一方で、only
節はコードをもう少し冗長にします。しかし、コード内で自分自身を繰り返す必要があります。モジュールに変数/関数/サブルーチンののロットが含まれていると、扱いにくいものになります。
ここでは例です:
module constants
implicit none
real, parameter :: PI=3.14
real, parameter :: E=2.71828183
integer, parameter :: answer=42
real, parameter :: earthRadiusMeters=6.38e6
end module constants
program test
! Option #1: blanket "use constants"
! use constants
! Option #2: Specify EACH variable you wish to use.
use constants, only : PI,E,answer,earthRadiusMeters
implicit none
write(6,*) "Hello world. Here are some constants:"
write(6,*) PI, &
E, &
answer, &
earthRadiusInMeters
end program test
更新 うまくいけば、誰かが "ちょうどC#でそれを再コーディングFortranの?!" のようなものを言います私はあなたに投票することができます。
更新
私は、FortranのUSE modulename
Pythonのfrom modulename import *
とを比較しTim Whitcomb's answerを、好き。前のスタックオーバーフローにされているトピック:
‘import module’ or ‘from module import’
- In an answer、マークロディは言及:
は、 'モジュールのインポート*から' を使用しないでください。 合理的な大規模なコードの場合、 をインポートすると、 モジュールに接合する可能性があります。 を取り外すことはできません。その非常に 難しい 東あなたはもう インポートを使用していないと思うポイント に到達するためにそれを作る、「モジュール」から来ているかの項目コードに を使用し決定すること 困難であるが、これは、念のため。
- In an answer、マークロディは言及:
- dbr's answer
が* Xのインポートから行いません含まれています - あなたは簡単に場所を見ることができない として、それは、理解することは非常に難しい あなたのコードを作りますメソッド はfrom(x import *; from y import *; my_func() - はmy_func 0123です。が定義されていますか?)
- dbr's answer
だから、私は明示的に
USE modulename, only : var1, var2, ...
などを経て、私はモジュール内で使用しているすべての項目を明記のコンセンサスに傾いています
あなたが大きいモジュールを持っている場合は、 が追加されたように感じるのは、 モジュールが大きすぎます。それを分割する。
Fortranの問題の1つは、モジュールからインポートするときに、Javascriptのようにグローバル名前空間内のすべてを常にスローするということです。 Pythonでは、foo.bar import *からだけでなく、foo import barからも行うことができます。 fortranでは、あなたは選択肢がありません。 USEを使うたびに、あなたはimport *をやっていて、すべてをグローバルな名前空間に含めます。これは最悪のFortran 9Xの問題の1つです。 –
@StefanoBorini:最後の文は、最近のFortranのバージョンで問題が解決されたことを意味しますか? – naught101
@ naught101 nope –