StrDistance 타입
StrDistance 타입 (raku-type-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일까요? o→n, l→e, d→w 이렇게 세 글자가 바뀌었기 때문이에요.
메서드
method before
실제로는 클래스 속성인데, 메서드처럼 불러서 변환 전 문자열을 돌려줘요.
say $str-dist.before; # OUTPUT: «fold»
method after
역시 클래스 속성으로, 변환 후 문자열을 돌려줘요.
say $str-dist.after; # OUTPUT: «fnew»
method Bool
before와 after가 서로 다르면 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»