Raku의 after — 순서 비교와 변환 후의 문자열
Raku의 after — 순서 비교와 변환 후의 문자열
after는 이름이 같지만 서로 다른 두 곳에서 쓰여요. 하나는 첫 번째 인자가 두 번째보다 큰지를 판단하는 비교 연산자(infix)이고, 다른 하나는 문자열 변환 결과에서 변환 '후'의 문자열을 꺼내는 메서드예요. 두 variant를 함께 정리할게요.
infix after — 앞이 뒤보다 큰지
multi infix:<after>(Any, Any)
multi infix:<after>(Real:D, Real:D)
multi infix:<after>(Str:D, Str:D)
multi infix:<after>(Version:D, Version:D)
일반적인 순서 비교로, cmp와 같은 의미론을 따라요. 첫 번째 인자가 두 번째보다 크면 True를 돌려줘요. (작으면 True를 주는 before와 짝이에요.)
say 3 after 2; # OUTPUT: «True»
say 1 after 2; # OUTPUT: «False»
say 'b' after 'a'; # OUTPUT: «True»
X::Parameter::WrongOrder의 after — 어느 파라미터 뒤인지
시그니처에서 파라미터 순서가 잘못된 컴파일 오류를 다루는 X::Parameter::WrongOrder 예외에도 after 메서드가 있어요. 여기서는 현재 파라미터가 어떤 종류의 파라미터 뒤에 잘못 놓였는지를 설명하는 문자열을 돌려줘요. 예를 들어 필수 파라미터가 선택 파라미터 뒤에 오는 경우 등이에요.
sub f($a?, $b) { } # 필수 $b가 선택 $a 뒤에 와서 컴파일 오류
after 메서드는 이 경우 "optional" 같은 설명을 돌려줘요.
StrDistance의 after — 변환 후의 문자열
StrDistance는 tr/// 변환 연산의 결과를 표현하는 객체예요. after는 클래스 속성이라 메서드처럼 부르면 변환 후의 문자열을 돌려줘요.
my $str = "fold";
my $str-dist = ($str ~~ tr/old/new/);
say $str-dist.after; # OUTPUT: «fnew»
before와 대비되는데, before는 변환 전 문자열(fold)을 돌려줘요.