我正在解决这个问题,我得到了答案:
静态地:20,16
动态:20,100
是正确的吗?
考虑下面的程序(使用Pascal语言)。什么是输出 语言是静态范围的吗?如果语言是动态范围的,那么输出是什么?
Program main;
x: integer;
procedure f1(z: integer)
begin
return z * x;
end
procedure f2(z: integer)
int x;
begin
x = 2;
return f1(z) * x;
end
begin /* main program */
x = 5;
print f1(4);
print f2(4);
end
答案 0 :(得分:2)
为什么不尝试两个版本?将Perl与静态范围一起使用:
my $x = 5;
sub f1($) {
my $z = shift;
return $z * $x;
}
sub f2($) {
my $z = shift;
my $x = 2;
return f1($z) * $x;
}
print f1(4), "\n";
print f2(4), "\n";
我得到20
,40
。 (20
为4 * 5
,40
为(4 * 5) * 2
。)
用my
取代所有local
以获得动态范围,我得到20
,16
。 (20
为4 * 5
,16
为(4 * 2) * 2
。)
不幸的是,由于你只是发表了你的结论,没有解释,我不能指出你哪里出错了。 。