StrDistance 타입

StrDistance 타입 (raku-type-strdistance)

문자열 변환의 결과를 담는 타입이에요. 문자열을 바꾸는 변환 연산자가 돌려주는 값을 이 객체가 표현해요.

출처: Raku Docs - StrDistance

정의

문자열 변환은 어떤 Str을 대상으로 일어나요. 예를 들어 다음과 같이 문자 치환(transliteration)을 하면 결과가 StrDistance로 돌아와요.

say (($ = "fold") ~~ tr/old/new/).^name;  # OUTPUT: «StrDistance␤»

StrDistance 객체는 문자열 문맥에서 쓰면 변환 후의 결과 문자열로 표현되고, 숫자 문맥에서 쓰면 변환 전후 문자열 사이의 거리로 표현돼요.

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

"fold"tr/old/new/로 치환하면 "fnew"가 되죠. 그런데 왜 거리가 3일까요? on, le, dw 이렇게 세 글자가 바뀌었기 때문이에요.

메서드

method before

실제로는 클래스 속성인데, 메서드처럼 불러서 변환 전 문자열을 돌려줘요.

say $str-dist.before; # OUTPUT: «fold␤»

method after

역시 클래스 속성으로, 변환 후 문자열을 돌려줘요.

say $str-dist.after;  # OUTPUT: «fnew␤»

method Bool

beforeafter가 서로 다르면 True를 돌려줘요. 변환이 실제로 무언가를 바꿨는지 확인할 때 써요.

method Numeric

거리를 숫자로 돌려줘요.

method Int

multi method Int(StrDistance:D:)

변환 전후 문자열 사이의 거리를 돌려줘요.

method Str

multi method Str(StrDistance:D: --> Str)

after 문자열 값을 돌려줘요. 즉 문자열 변환 후의 결과를 돌려주는 거예요.

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