引用组件
您可以使用 组件标志符来引用特定结构组件。 标量组件标志符具有以下语法:
- NAME
- 是派生类型对象的名称
- comp_name
- 是派生类型组件的名称
- int_expr
- 是称为下标表达式的标量整数或实数表达式
- separator
- 是 % 或
. 
结构组件具有与最右边的 comp_name相同的类型,类型参数和 POINTER 属性 (如果有)。 它从父对象继承任何 INTENT, TARGET和 PARAMETER 属性。
注意:
- 每个 comp_name 都必须是前一个 名称 或 comp_name的声明类型的组件。
- name 和每个 comp_name(最右边除外) 必须是派生类型。
- 任何 int_expr_list 中的下标表达式数必须等于前面 名称 或 comp_name的秩。
- name 必须是数据对象的名称。
- 只有 name 或最多一个 comp_name 可以具有非零列组。 如果 name 或 comp_name 具有非零列组,那么右侧的 comp_name 不得具有 ALLOCATABLE 或 POINTER 属性。
- 结构组件的列组是具有非零列组 (如果有) 的 comp_name 的名称的列组。 否则,列组为零。
如果 最右侧comp_name的声明类型为抽象类型,则结构组件必须是多态的。 
在名称列表格式中,分隔符必须是百分号。
如果表达式具有可以使用句点作为分隔符或作为二进制操作解释为结构组件的表单,并且可以在作用域限定单元中访问具有该名称的运算符,那么 IBM® Open XL Fortran 会将表达式视为二进制操作。 如果这不是您想要的解释,那么应该使用百分号来取消引用部件,或者以自由源形式在句点与 comp_name之间插入空格。
示例
示例 1: 不明确使用句点作为分隔符
MODULE MOD
STRUCTURE /S1/
STRUCTURE /S2/ BLUE
INTEGER I
END STRUCTURE
END STRUCTURE
INTERFACE OPERATOR(.BLUE.)
MODULE PROCEDURE BLUE
END INTERFACE
CONTAINS
INTEGER FUNCTION BLUE(R1, I)
RECORD /S1/ R1
INTENT(IN) :: R1
INTEGER, INTENT(IN) :: I
BLUE = R1%BLUE%I + I
END FUNCTION BLUE
END MODULE MOD
PROGRAM P
USE MOD
RECORD /S1/ R1
R1%BLUE%I = 17
I = 13
PRINT *, R1.BLUE.I ! Calls BLUE(R1,I) - prints 30
PRINT *, R1%BLUE%I ! Prints 17
END PROGRAM P
示例 2: 混合分隔符
STRUCTURE /S1/
INTEGER I
END STRUCTURE
STRUCTURE /S2/
RECORD /S1/ C
END STRUCTURE
RECORD /S2/ R
R.C%I = 17 ! OK
R%C.I = 3 ! OK
R.C.I = 19 ! OK
END
示例 3: 任何派生类型的百分比和周期工作
STRUCTURE /S/
INTEGER I, J
END STRUCTURE
TYPE DT
INTEGER I, J
END TYPE DT
RECORD /S/ R1
TYPE(DT) :: R2
R1.I = 17; R1%J = 13
R2.I = 19; R2%J = 11
END
