RPGle - 我希望我能用RPGLe做一些'反思'

Cha*_*tin 5 reflection rpgle ibm-midrange

我希望我能用RPGLe做一些反思.通过反思,我的意思是:'在运行时确定对象功能的过程或机制.'

想象一下,你有这个数据结构:

 D DS_Format       DS                  Qualified Based(pDS_Format)
 D  Type                         20I 0 Inz(1)
 D  Label                        50A   Inz('myLabel')
 D  Description                5000A   Inz('myDescription')        
Run Code Online (Sandbox Code Playgroud)

使用反射api,我可以这样做:

Reflection_ListSubfields(DS_Format); 
Run Code Online (Sandbox Code Playgroud)

=>返回此数组:{'Type','Label','Description'}

然后,我可以这样做:

Reflection_GetSubfield(DS_Format : 'Label'); => return 'myLabel'
Run Code Online (Sandbox Code Playgroud)

我希望我也可以这样做:

Reflection_GetSubfieldType(DS_Format : 'Label'); => return 'A'
Reflection_GetSubfieldLength(DS_Format : 'Label'); => return 50
Reflection_GetSubfieldPrecision(DS_Format : 'Type'); => return 0
Run Code Online (Sandbox Code Playgroud)

有了这个,我希望我可以做这样的事情(有一些小工作):

SerializeXml(DS_Format); //I build xml with one line of code !
Run Code Online (Sandbox Code Playgroud)

得到:

<DS_Format>
    <Type>1</Type>
    <Label>myLabel</Label>
    <Description>myDescription</Description>
</DS_Format>
Run Code Online (Sandbox Code Playgroud)

与DeserializeXml(myXml)相反;

反思会帮助我建立真正酷的apis.有什么办法吗?

War*_*enT 3

我一直在考虑其中的一些概念,并且可能有解决办法。(我现在没有时间写完整的答案并充实细节,但等你看到有一些希望;-)尽管有些人可能认为这是一种作弊。)

基本概念是这样的:如果您定义了一个具有所需格式的表(如果您的日期结构允许 DS 进行外部定义),那么使用嵌入式 SQL,您可以描述该表或查询 SYSCOLUMNS 来获取字段定义,最好是在过程中。

诚然,这与反思不同,但可以达到相同的效果。人们可能只会在有限的情况下这样做。我相信其他人会指出各种各样的问题,但这里的重点是这是可能的。