静态绑定和动态绑定之间的区别 - 相互递归

时间:2014-06-19 11:47:32

标签: dynamic-binding static-binding

我有一段类似帕斯卡的代码:

const str = "three";


    function foo(n : Integer) : String

    const str = "two " ^ str;

    function bar(n : Integer) : String
        const str = "one" ^ str;
        begin
    if n=0 then bar := str
                else bar := foo(n-1); 
        end;

    begin
        if n=0 then foo := str
            else foo := bar(n-1); 
end;

 begin
    writeln(foo(2));
    writeln(foo(3));
 end.

我想弄清楚输出是什么:

  1. 该语言支持静态绑定
  2. 该语言支持动态绑定
  3. 对于第一种情况,我认为它将是:"一一二三" 对于后一种情况,实际上,我不确定。

    我知道静态绑定意味着实体(在我们的例子中是const" str")在编译期间被绑定/定义,谁调用哪个函数最后是无关紧要的,这意味着它可以通过阅读函数代码来推断。 我也知道动态绑定意味着实体(即" str")绑定依赖于调用堆栈。 相互递归让我有点困惑。那么我应该从每个案例中得到什么输出以及为什么?

0 个答案:

没有答案