【问题标题】:Fortran dynamic field reference?Fortran 动态字段引用?
【发布时间】:2015-11-11 02:04:34
【问题描述】:

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

fldnm = 'fred';
s.(fldnm) = 18;
y = s.(fldnm) 

查看这些链接(对于 Matlab 示例): http://blogs.mathworks.com/loren/2005/12/13/use-dynamic-field-references/ http://www.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html

谢谢!

【问题讨论】:

    标签: oop fortran fortran90 derived-types


    【解决方案1】:

    没有。也许您需要将字段名称和值都存储在数据对象中,而不是尝试为字段名称使用组件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-05
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多