Raku의 after — 순서 비교와 변환 후의 문자열

Raku의 after — 순서 비교와 변환 후의 문자열

after는 이름이 같지만 서로 다른 두 곳에서 쓰여요. 하나는 첫 번째 인자가 두 번째보다 큰지를 판단하는 비교 연산자(infix)이고, 다른 하나는 문자열 변환 결과에서 변환 '후'의 문자열을 꺼내는 메서드예요. 두 variant를 함께 정리할게요.

출처: Raku 공식 문서 — routine after

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 — 변환 후의 문자열

StrDistancetr/// 변환 연산의 결과를 표현하는 객체예요. after는 클래스 속성이라 메서드처럼 부르면 변환 후의 문자열을 돌려줘요.

my $str = "fold";
my $str-dist = ($str ~~ tr/old/new/);
say $str-dist.after;  # OUTPUT: «fnew␤»

before와 대비되는데, before는 변환 전 문자열(fold)을 돌려줘요.