不是。您可能需要將字段名稱和值存儲在數據對象中,而不是嘗試爲字段名稱使用組件。
否則,您需要用SELECT CASE語句或類似方法來包裝派生類型對象組件的引用或定義。
TYPE :: t
INTEGER :: fred
INTEGER :: roger
INTEGER :: bill
END TYPE t
SUBROUTINE set(object, name, value)
TYPE(t), INTENT(INOUT) :: object
CHARACTER(*), INTENT(IN) :: name
INTEGER, INTENT(IN) :: value
SELECT CASE (name)
CASE ('fred') ; object%fred = value
CASE ('roger') ; object%roger = value
CASE ('bill') ; object%bill = value
END SELECT
END SUBROUTINE set
FUNCTION get(object, name)
TYPE(t), INTENT(IN) :: object
CHARACTER(*), INTENT(IN) :: name
INTEGER :: get
SELECT CASE (name)
CASE ('fred') ; get = object%fred
CASE ('roger') ; get = object%roger
CASE ('bill') ; get = object%bill
END SELECT
END FUNCTION get
TYPE(t) :: s
CALL set(s, 'fred', 18)
y = get(s, 'fred')