Oop Fortran动态字段参考?

Oop Fortran动态字段参考?,oop,fortran,fortran90,derived-types,Oop,Fortran,Fortran90,Derived Types,是否可以在Fortran中动态引用派生类型字段?我想实现在Matlab中可以实现的效果: fldnm = 'fred'; s.(fldnm) = 18; y = s.(fldnm) 请参见以下链接(有关Matlab示例): 谢谢 否。也许您需要在数据对象中同时存储字段名和值,而不是尝试使用组件作为字段名 否则,您需要使用SELECT CASE语句或类似语句包装派生类型对象组件的引用或定义 TYPE :: t INTEGER :: fred INTEGER :: roger IN

是否可以在Fortran中动态引用派生类型字段?我想实现在Matlab中可以实现的效果:

fldnm = 'fred';
s.(fldnm) = 18;
y = s.(fldnm) 
请参见以下链接(有关Matlab示例):


谢谢

否。也许您需要在数据对象中同时存储字段名和值,而不是尝试使用组件作为字段名

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