派生資料型別
定義一個新型別 mytype
:
type::mytype
integer::int
real :: float
end type mytype
宣告 mytype 型別的變數 :
type(mytype) :: foo
可以使用%
運算子 1 訪問派生型別的元件 :
foo%int = 4
foo%float = 3.142
Fortran 2003 功能(尚未由所有編譯器實現)允許定義引數化資料型別:
type, public::matrix(rows, cols, k)
integer, len::rows, cols
integer, kind::k = kind(0.0)
real(kind = k), dimension(rows, cols) :: values
end type matrix
派生型別 matrix
有三個型別引數,它們在型別名稱後面的括號中列出(它們是 rows
,cols
和 k
)。在每個型別引數的宣告中,必須指出它們是 kind(kind
)還是 length(len
)型別引數。
型別引數(如內部型別的引數)必須是常量表示式,而長度型別引數(如內部字元變數的長度)在執行期間可能會有所不同。
請注意,引數 k
具有預設值,因此當宣告 matrix
型別的變數時,可以提供或省略它,如下所示
type (matrix (55, 65, kind=double)) :: b, c ! default parameter provided
type (matrix (rows=40, cols=50) :: m ! default parameter omitted
派生型別的名稱可能不是 doubleprecision
或與任何內在型別相同。
- 許多人想知道為什麼 Fortran 使用
%
作為元件訪問運算子,而不是更常見的.
。這是因為.
已經被運算子語法所取代,即.not.
,.and.
,.my_own_operator.
。