1. Dynamic scoping in Perl
Perl에서는 Dynmaic scoping 변수를 선언하기 위해서는 local 이라는 키워드를 사용해야한다.
#in Fighter file
our $coins_to_obtain = 20;
sub obtain_coins{
my ($self) = @_;
if ($AdvancedFighter::coins_to_obtain eq $coins_to_obtain ){
$self->{coins} = sum $self->{coins}, $coins_to_obtain;
}else{
$self->{coins} = sum $self->{coins}, $AdvancedFighter::coins_to_obtain;
}
}
# in tournament file
sub update_fighter_properties_and_award_coins{
local $AdvancedFighter::coins_to_obtain = 20;
local $AdvancedFighter::delta_attack = -1;
local $AdvancedFighter::delta_defense = -1;
local $AdvancedFighter::delta_speed = -1;
}
과제 때 활용한 코드에서는 coins_to_obtain에 local 키워드를 사용하여 이 변수를 다른 파일에서도 사용 할 수 있게 해주었다. 이때 이 변수 데이터가 fighter file의 coins_to_obtain가 구분하기 위하여 앞에 $AdvancedFighter::라는 대응표로 구분 시켜 주었다. 따라서 local 키워드를 사용한 변수들은 다른 파일이든 아니면 다른 함수에서 사용해도 어디에서든 변화 될 수 있고 사용할 수 있다. 즉, dynamic scoping이 적용된 변수는 다른 영역에서도 아무 선언 없이 자유롭게 사용 될 수 있다.
2. 장점
local이라는 키워드를 변수에 선언하면 어디서든 자유롭게 사용 가능하다.
3. 단점
해당 변수를 여기저기서 사용할 경우 어떻게 그 변수가 변화되는지 추적하기 어려워 질 것이다.
4. My Review
내가 한 과제에서는 local이라는 키워드를 사용한 이유는 해당 로직에서 라운드 승리시 코인의 변화를 준 후에 라운드 종료시 다시 획득 코인의 수를 기본값인 20으로 초기화 해줘야 하기때문에 이것을 dynamic scoping으로 만들어야 했다. 처음에는 같은 이름의 변수가 어떻게 다르게 적용 될 수가 있는 지 이해가 되지 않았지만 과제를 통해 어떻게 활용 할 수 있을지 조금 더 깨닫을 수 있었다.
'Language' 카테고리의 다른 글
| [Python] What is static scoping in python? (2) | 2023.02.28 |
|---|---|
| [Python] What is Duck typing? (1) | 2023.02.06 |
| [Python] What is Dynamic typing? (2) | 2023.01.30 |
| [C 언어] How to read file in C (2) | 2023.01.18 |
| [COBOL] What is COBOL ? (0) | 2023.01.10 |