【问题标题】:What exactly does the {} argument reference do?{} 参数引用到底有什么作用?
【发布时间】:2014-02-14 16:01:25
【问题描述】:

我是 progress-4gl (OpenEdge) 的新手,我遇到了一些代码,在我的一生中我无法完全理解它的作用。下面是我试图剖析的代码示例以及我在这种情况下找到的所有材料。

我意识到我的答案在材料中,但我无法真正理解它,因为我想。希望比我有更多知识的人可以帮助我。感谢为此花费的任何人:

Function functionName RETURNS CHAR ( integerName AS INT ) {1}:

此函数存储在包含文件中,并由不同的过程以下列方式调用:

charName = GetCommSecType ( intName )

我不完全理解的是为什么存在 {1} 以及它到底在做什么。如果我不放 {1} 一切似乎都一样。我查看了将其信息粘贴在下面的帮助文件:

{ } 参数参考:
引用过程传递给被调用的外部过程文件或包含文件的参数的值。 ABL 将每个参数转换为字符格式。如果在 RUN 语句或包含文件引用中将参数指定为字符串常量,则此转换将删除周围的双引号。 当一个过程被另一个过程调用并使用参数时,ABL 重新编译被调用过程,替换调用过程传递的参数,然后运行被调用过程。

我相信这样做的目的是允许包含文件功能在命令行 RUN 命令上运行。如果我错了,请纠正我。谢谢

【问题讨论】:

    标签: progress-4gl openedge


    【解决方案1】:

    {} 是一种称为预处理器的东西,这意味着它只在编译时影响程序的结果,而不是运行时。

    通常你会包含一个 .i 文件,而不是运行它,但这种语法可以用于运行和包含文件。

    在这种特殊情况下,这意味着编译器将在写入 {1} 的位置插入一些内容。 {1} 表示插入的第一个参数。您也可以命名参数(请参阅下面的链接)。

    这样的文件的简单包含:

    {filename.i}
    

    在这种情况下,猜测插入的内容并不容易,但基本上如果您执行这样的包含:

    DEFINE VARIABLE c AS CHARACTER   NO-UNDO.
    c = "ABC".
    {c:\temp\includetest.i c}
    

    编译器将在您的包含文件中写入 {1} 的位置插入 ABC。这在这个例子中当然没有意义。而且我现在不知道参数和冒号之间真正可以写的任何东西。

    假设您的 filname.i 文件仅包含。

    DISPLAY {1}.
    

    像上面那样执行包含将使编译器将 {1} 替换为“ABC”,从而使语句看起来像这样:

    DISPLAY c.
    

    运行它会显示 c - "ABC" 的值。

    您必须提供运行代码或包含您的文件才能更好地理解这一点!

    this document 中的第 22 页及前页更深入地描述了这一点。

    【讨论】:

    • 感谢您的详细解释和参考文件,这是我在发布之前经历的同一份文件。我对您的解释的一个问题如下:包含文件函数中的函数有一个参数和一个{1}。因此,当我的过程调用包含文件中的函数时,它会传入一个整数。那么,Interger 会通过两次吗?
    • 不,它与函数的调用无关。它会影响文件的包含或运行。
    • {}中的数字与函数的参数无关,也不是整数,它与使用include时传递的参数的位置有关。
    • 好的,谢谢你的澄清,我想我现在明白了。只需要对预处理器编码进行更多练习。
    猜你喜欢
    • 2010-12-31
    • 2019-12-18
    • 2021-10-30
    • 1970-01-01
    • 2010-10-08
    • 2017-07-26
    • 1970-01-01
    • 2011-04-18
    • 2016-08-31
    相关资源
    最近更新 更多