ComplexStr — 복소수와 문자열을 동시에 담는 이중 값 타입
ComplexStr — 복소수와 문자열을 동시에 담는 이중 값 타입
리터럴 42+0i는 숫자로도 문자열로도 쓰일 수 있어요. 그런 "이중 값(dual value)"을 담당하는 타입이 바로 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
ComplexStr의 Complex 값을 반환해요.
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와 $b의 Complex 값이 동일하고, Str 값도 동일하면 True를, 그렇지 않으면 False를 반환해요.