IntStr 타입

IntStr 타입 (raku-type-intstr)

정수와 문자열, 두 값을 동시에 담는 이중 값 타입이에요. Allomorph(그리고 그 상위인 Str)과 Int를 둘 다 상속받아서, 숫자로도 문자열로도 쓰일 수 있어요.

출처: Raku Docs - IntStr

정의

class IntStr is Allomorph is Int { }

IntStrAllomorph의 하위 클래스뿐 아니라 Int의 하위 클래스이기도 해요. .Int 문맥에서는 정수로, .Str 문맥에서는 문자열로 행동하는 거죠. 이런 타입은 < > 따옴표 없는 단어 리스트에서 숫자처럼 보이는 토큰을 만들 때 나와요.

my $int-str = <42>;
say $int-str.^name;     # OUTPUT: «IntStr␤»

my Int $int = $int-str; # OK!
my Str $str = $int-str; # OK!

# ∈ operator cares about object identity
say 42 ∈ <42  55  1>;   # OUTPUT: «False␤»

42Int이고 <42>IntStr이라서, 같은 값처럼 보여도 (원소 검사)는 객체 정체성까지 따지니 False가 나와요.

참고: Allomorph에 대한 더 자세한 내용은 Allomorph 문서에서 다뤄요.

메서드

method new

method new(Int $i, Str $s)

생성자는 Int 값과 Str 값을 둘 다 요구해요. 직접 만들 때는 원하는 값들을 넣으면 돼요.

my $f = IntStr.new(42, "forty two");
say +$f; # OUTPUT: «42␤»
say ~$f; # OUTPUT: «"forty two"␤»

method Int

method Int

IntStr의 정수 값을 돌려줘요.

method Numeric

multi method Numeric(IntStr:D: --> Int:D)
multi method Numeric(IntStr:U: --> Int:D)

:D(정의된 값) 변형은 invocant의 숫자 부분을 돌려줘요. :U(정의되지 않은 값) 변형은 숫자 문맥에서 초기화되지 않은 값을 썼다는 경고를 낸 뒤 0을 돌려줘요.

method Real

multi method Real(IntStr:D: --> Int:D)
multi method Real(IntStr:U: --> Int:D)

Numeric과 마찬가지로, :D 변형은 숫자 부분을 돌려주고 :U 변형은 경고 후 0을 돌려줘요.

연산자

infix ===

multi infix:<===>(IntStr:D $a, IntStr:D $b)

IntStr 값 정체성 연산자예요. $a$bInt 값이 서로 같고 Str 값도 서로 같을 때만 True를 돌려줘요. 그 외에는 False예요.