ComplexStr — 복소수와 문자열을 동시에 담는 이중 값 타입

ComplexStr — 복소수와 문자열을 동시에 담는 이중 값 타입

리터럴 42+0i는 숫자로도 문자열로도 쓰일 수 있어요. 그런 "이중 값(dual value)"을 담당하는 타입이 바로 ComplexStr입니다.

출처: Raku 공식 문서 — ComplexStr

본문

class ComplexStr is Allomorph is Complex {}

ComplexStr은 이중 값 타입으로, Allomorph(따라서 Str)와 Complex 양쪽의 서브클래스예요.

자세한 내용은 Allomorph를 참고하세요.

my $complex-str = <42+0i>;
say $complex-str.^name;             # OUTPUT: «ComplexStr␤»

my Complex $complex = $complex-str; # OK!
my Str     $str     = $complex-str; # OK!

# ∈ 연산자는 객체 정체성(identity)을 따져요
say 42+0i ∈ <42+0i  55  1>;         # OUTPUT: «False␤»

메서드

method new

method new(Complex $i, Str $s)

생성자는 Complex 값과 Str 값이 모두 필요해요. 직접 만들 때는 값을 원하는 대로 넣을 수 있습니다.

my $f = ComplexStr.new(42+0i, "forty two (but complicated)");
say +$f; # OUTPUT: «42+0i␤»
say ~$f; # OUTPUT: «"forty two (but complicated)"␤»

method Capture

method Capture(ComplexStr:D: --> Capture:D)

Mu.Capture와 동일해요.

method Complex

method Complex

ComplexStrComplex 값을 반환해요.

method Numeric

multi method Numeric(ComplexStr:D: --> Complex:D)
multi method Numeric(ComplexStr:U: --> Complex:D)

:D 변형은 invocant의 숫자 부분을 반환해요. :U 변형은 초기화되지 않은 값을 숫자 맥락에서 쓴다는 경고를 낸 다음 <0+0i> 값을 반환해요.

method Real

multi method Real(ComplexStr:D: --> Num:D)
multi method Real(ComplexStr:U: --> Num:D)

invocant의 숫자 부분을 Num으로 강제 변환해요. 허수부가 대략적으로 0이 아니면 변환이 X::Numeric::Real실패해요.

:D 변형은 그 변환 결과를 반환해요. :U 변형은 초기화되지 않은 값을 숫자 맥락에서 쓴다는 경고를 낸 다음 0e0 값을 반환해요.

연산자

infix ===

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

ComplexStr 값 정체성 연산자예요. $a$bComplex 값이 동일하고, Str 값도 동일하면 True를, 그렇지 않으면 False를 반환해요.