【问题标题】:Is there a way to call the field of a derived type using a string?有没有办法使用字符串调用派生类型的字段?
【发布时间】:2014-04-15 18:44:55
【问题描述】:

有没有办法通过fortran中的字符串参数调用派生类型的字段?

类似...

subroutine set(car, fieldName, value)
    type(Car_T) :: car
    character*(*) :: fieldName
    character*(*) :: value

    car%[fieldName] = value
end subroutine set

我知道你可以在 javascript、c# 等中做这样的事情,但是如果 fortran 允许的话,这真的可以帮助我避免大量重复代码。

【问题讨论】:

  • 似乎您可能想要使用关联数组而不是派生类型组件。
  • 对 Fortran 中的关联数组有什么建议吗?我使用过 Judy 数组 (judy.sourceforge.net) 和其他自行实现的东西。

标签: fortran


【解决方案1】:

没有。您将需要编写将字符串的值映射到相关组件的可执行代码(可能是 SELECT CASE 构造)。

您只需为每组唯一的组件名称编写一次。

【讨论】:

  • 这是我目前正在考虑的方式,但是有几种不同类型的文件输入,并且可以有几种不同的子类型,所以我必须编写很多代码多次做非常相似的事情。不是我的原始代码,但我正在尽我所能。
【解决方案2】:

您可以对名单做类似的事情,但它是针对程序已知的项目:不是新项目。

integer:: inin
real:: rere
namelist /info/ inin, rere

inin = 0 ! default
rere = 20.4 ! default
read (*, nml=info)
print *, 'inin=', inin
print *, 'rere=', rere

stop
end

关于输入

&info inin=2 rere=40.0 /

或者如果您只想输入一个值

&info rere=3.162 /

【讨论】:

  • 这并不完全符合我的要求,但是通过让它读取字符串而不是标准输入,我能够做到。感谢您提醒我这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 2022-06-18
  • 1970-01-01
  • 2022-01-09
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多