1. Dynamic Scoping 解释:
对应的是static scoping。我们现在熟悉的大部分语言都是static scoping的(C,Python,Java)
static scoping意思是变量在声明之后只能在它所在的block中可见
dynamic scoping则是在对应的subfunction中也可见
2. 用perl(允许dynamic scoping)举个例子:
一共有两个package——AdvancedTournament 和 AdvancedFighter:
我们首先看看变量的声明方:
sub update_fighter_properties_and_award_coins{
#coins_to_obtain等变量是AdvancedFighter这个包中变量
#在这里我们用local关键字将他们变成本地的一个变量
my($self,$fighter,$flag_defeat,$flag_rest) = @_;
local $AdvancedFighter::coins_to_obtain = $AdvancedFighter::coins_to_obtain;
local $AdvancedFighter::delta_attack = $AdvancedFighter::delta_attack;
local $AdvancedFighter::delta_defense = $AdvancedFighter::delta_defense;
local $AdvancedFighter::delta_speed = $AdvancedFighter::delta_speed;
my $history = $fighter->{history_record};
my @history_recor