2015-11-11 99 views

回答

2

不是。您可能需要將字段名稱和值存儲在數據對象中,而不是嘗試爲字段名稱使用組件。

否則,您需要用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')