【发布时间】:2012-08-08 07:15:53
【问题描述】:
我不得不翻译一些 Fortran 90 代码,发现了一个有趣的语言特性。
例如,它们定义了以下类型和动态数组变量:
TYPE WallInfo
CHARACTER(len=40) :: Name
REAL :: Azimuth
REAL :: Tilt
REAL :: Area
REAL :: Height
END TYPE WallInfo
TYPE(WallInfo), ALLOCATABLE, DIMENSION(:) :: Wall
在代码的后面,他们调用了一个函数:
CALL HeatFlow(Wall%Area, Wall%Azimuth)
作为一个 Delphi 程序员,这让我有点吃惊,因为 Wall 是一个记录数组!
从例程中的用法可以看出,Fortran 可以将记录数组中的字段投影为自己的数组。
SUBROUTINE HeatFlow( Area, Azimuth )
REAL, INTENT(IN), DIMENSION(:) :: Area
REAL, INTENT(IN), DIMENSION(:) :: Azimuth
有谁知道是否有办法用 Delphi 做到这一点(我使用的是 2010 版)?
我可以编写一个函数来将记录值提取为一个数组,但这有点乏味,因为我必须为每个字段编写一个专用例程(而且有很多)。
我希望 Delphi 2010 中有一些我错过的语言功能。
【问题讨论】:
-
您是否尝试在 WallInfo 的案例数组中使用数组或记录? Delphi 支持动态数组。在输入新值之前,首先使用 SetLength 设置数组的大小。
-
尽管 Remy 的 RTTI 答案很酷,但我很想将上面的记录类型转换为单独的线性数组:'Name:Array of String;方位角:双精度数组; ...' 然后我就不必使用这个可爱的 RTTI hack 来收集数据,因为它已经被收集了。
标签: arrays delphi delphi-2010 record projection