如果可能,如何显示未知的变量列表及其值

How to show an unknown list of variables and their values, if possible

正如之前在 some questions with "Progress-4GL" and "OpenEdge" tags 中提到的,我正在使用 AppBuilder 和过程编辑器。因此,调试的可能性非常有限:为了了解变量的值,我需要在屏幕上显示它们,如下所示:

MESSAGE "temp1=[" temp1 "], temp2=[" temp2 "]" VIEW-AS ALERT-BOX.

我也可以将这些信息放在日志文件中,但这不是这里的重点。

我想写一个程序来处理这个问题,比如:

PROCEDURE SHOW_VARIABLES_AND_VALUES (INPUT I1, INPUT I2, ...):
  1. <put parameter names and values together inside one string> => """I1="" I1"
  2. <do this for all input parameters (the number is unknown)> => """I1="" I1, ""I2="" I2, ..."
  3. <how to use this (MESSAGE VIEW-AS ALERT-BOX, LOG, ...) there I'll know what to do>

有人知道前两点怎么处理吗(把变量名和值放在一起,处理未知数量的输入参数)?

提前致谢

您可以使用 SUBSTITUTE 函数。

MESSAGE SUBSTITUTE ("temp1=&1 ~ntemp2=&2 ~n temp3=&3",
                    temp1,
                    temp2,
                    temp3) VIEW-AS ALERT-BOX. 

遗憾的是,无法动态访问变量或参数。所以没有办法自动将所有输入参数添加到消息字符串中。 ABL 中也没有 anytype 参数类型——用于用户定义的函数或过程。因此,您必须经常使用 STRING() 函数将输入参数转换为字符串,作为最适合所有参数的参数。

另一方面,内置的 SUBSTITUTE 函数可以处理任何类型的参数。所以temp1、temp2和temp3实际上可以是任何数据类型的变量或参数。

正如我对您之前的一个问题的评论之一所提到的:给 OpenEdge 调试器一个机会。 Progress Developer 工作室之外的调试器看起来很有历史意义。但它确实起作用了。

同时我决定使用以下系统(因为我的要求似乎是不可能的):

  MESSAGE "temp1=[" temp1 "]~n" ~
          "temp2=[" temp2 "]~n" ~
          "temp3=[" temp3 "]~n" ~
          "temp4=[" temp4 "]" ~
        VIEW-AS ALERT-BOX.

为了方便使用,我找到了波浪字符的以下键盘“快捷键”:ALT+0126.

正如 Stefan 所指出的,这要好得多(没有波浪号,也不需要快捷方式):

  MESSAGE "temp1=[" temp1 "]" SKIP
          "temp2=[" temp2 "]" SKIP
          "temp3=[" temp3 "]" SKIP
          "temp4=[" temp4 "]" SKIP
        VIEW-AS ALERT-BOX.