代码之家  ›  专栏  ›  技术社区  ›  sixtyfootersdude

按名称调用示例

  •  8
  • sixtyfootersdude  · 技术社区  · 15 年前

    在我的编程课程中,我们讨论的是不同的调用方法。我们讨论的一些问题是:

    • 按值调用
    • 参考呼叫
    • 按值/结果调用
    • 按名称呼叫

    我找不到按名称调用如何工作的示例。有人愿意给我举个例子吗?我认为当您将一个XML文件作为输入时, 类似的 按姓名呼叫。有人能给我举个更传统的例子吗?

    3 回复  |  直到 12 年前
        1
  •  9
  •   Gian    15 年前

    我将使用一种假设的编程语言。假设我们有一个函数 p(x) 打印出X,然后返回。现在让我们定义一个函数:

    function foo(x, y) { return y+1; }
    

    现在让我们用一些参数来调用它:

    foo(p(123),p(456))
    

    x y 将替换参数,因此调用 foo 以上结果将导致:

    return p(456)+1;
    

    所以我们要把456打印到屏幕上,然后返回457。在另一个评估策略中,我们将首先评估功能参数(在过程中将123和456打印到屏幕上),然后用456替换 Y 在函数体中,最终返回457。

    这是人为的,但我希望你能理解。一切都是关于替代。

        2
  •  2
  •   Scharron    15 年前

    http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name

    在按值调用中,计算参数,检索随后传递给函数的值。 foo(bar()) 被评估为 arg = bar(); ,然后调用foo(arg),在函数体中,这个新分配的arg变量是可访问的、可修改的……

    在按名称调用中,可以用函数体中对参数的任何引用替换它们 代码 在通话中使用。然后,评估主体,您将评估参数。 FO(巴特) 具有 foo(arg) { return arg; } 将被评估为 foo(arg) { return bar(); }

        3
  •  1
  •   Abdo    12 年前

    按名称呼叫 作为工作 参考呼叫 当实际参数为 定标器 ,但实际参数为 表达式或数组 然后在每次访问时重新评估实际参数。

    下面是一个简单的例子

    begin
        integer n;
        procedure p(k: integer);
            begin
            print(k);
            n := n+1;
            print(k);
            end;
        n := 0;
        p(n+10);
        end;
    
    • 按值调用输出=>10 10
    • 按名称调用输出=>10 11
    推荐文章