文:インタフェース宣言を使って,総称代入を定義することができます。このようなインタフェース宣言中で使用できる手続は,ユーザー定義代入として引用できるサブルーチンに限られます。
このようなインタフェース宣言の最初の行は次の形式を取ります。
形式
INTERFACE ASSIGNMENT(=)
インタフェース宣言中のサブルーチンは,2 つの省略できない引数を持たなくてはなりません。第 1 の引数は OUT または INOUT の INTENT を持ち,第 2 の引数は IN の INTENT を持たなくてはなりません。
ユーザー定義代入は,サブルーチンの引用として扱われます。代入の左辺は,サブルーチンの第 1 仮引数に対応します。代入の右辺は,第 2 引数に対応します。
ASSIGNMENT キーワードは,等号の両辺が同じ構造型である場合,代入演算を拡張または再定義します。
ユーザー定義要素別処理代入は,SUBROUTINE 文中で ELEMENTAL を宣言することによって指定します。
総称代入が関わるすべての手続引用は,1 つの固有手続に対して解決可能でなくてはなりません。つまり,曖昧であってはなりません。詳細については,「総称手続の一義的な引用」を参照してください。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
例
次に,代入を定義する手続インタフェース宣言の例を示します。
INTERFACE ASSIGNMENT (=) SUBROUTINE BIT_TO_NUMERIC (NUM, BIT) INTEGER, INTENT(OUT) :: NUM LOGICAL, INTENT(IN) :: BIT(:) END SUBROUTINE BIT_TO_NUMERIC SUBROUTINE CHAR_TO_STRING (STR, CHAR) USE STRING_MODULE ! 型 STRING を定義を含む TYPE(STRING), INTENT(OUT) :: STR ! 可変長文字列 CHARACTER(*), INTENT(IN) :: CHAR END SUBROUTINE CHAR_TO_STRING END INTERFACE
次の例は,サブルーチン BIT_TO_NUMERIC を引用する 2 つの等価な方法を示しています。
CALL BIT_TO_NUMERIC(X, (NUM(I:J))) X = NUM(I:J)
次の例は,サブルーチン CHAR_TO_STRING を引用する 2 つの等価な方法を示しています。
CALL CHAR_TO_STRING(CH, '432C') CH = '432C'
以下に他の例を示します。
! サークル・データをインターバル・データに変換 module mod1 TYPE CIRCLE REAL radius, center_point(2) END TYPE CIRCLE TYPE INTERVAL REAL lower_bound, upper_bound END TYPE INTERVAL CONTAINS SUBROUTINE circle_to_interval(I,C) type (interval),INTENT(OUT)::I type (circle),INTENT(IN)::C ! 円の中心を x=-axis に投影します。 ! 注意:インターバルの長さは円の直径です。 I%lower_bound = C%center_point(1) - C%radius I%upper_bound = C%center_point(1) + C%radius END SUBROUTINE circle_to_interval end module mod1 PROGRAM assign use mod1 TYPE(CIRCLE) circle1 TYPE(INTERVAL) interval1 INTERFACE ASSIGNMENT(=) module procedure circle_to_interval END INTERFACE ! プログラムの実行部分を開始します。 circle1%radius = 2.5 circle1%center_point = (/3.0,5.0/) interval1 = circle1 . . . END PROGRAM