class ComplexStr
class ComplexStr is Allomorph is Complex {}
ComplexStr
is a dual value type, a subclass of both
Allomorph, hence Str, and
Complex.
See Allomorph for further details.
my $complex-str = <42+0i>;
say $complex-str.^name; # OUTPUT: Ā«ComplexStrā¤Ā»
my Complex $complex = $complex-str; # OK!
my Str $str = $complex-str; # OK!
# ā operator cares about object identity
say 42+0i ā <42+0i 55 1>; # OUTPUT: Ā«Falseā¤Ā»
Methods
method new
method new(Complex $i, Str $s)
The constructor requires both the Complex and the Str value, when constructing one directly the values can be whatever is required:
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)
Equivalent to Mu.Capture.
method Complex
method Complex
Returns the Complex value of the ComplexStr
.
method Numeric
multi method Numeric(ComplexStr:D: --> Complex:D)
multi method Numeric(ComplexStr:U: --> Complex:D)
The :D
variant returns the numeric portion of the invocant. The :U
variant issues
a warning about using an uninitialized value in numeric context and then returns value <0+0i>
.
method Real
multi method Real(ComplexStr:D: --> Num:D)
multi method Real(ComplexStr:U: --> Num:D)
Coerces the numeric portion of the invocant to Num. If the imaginary part isn't approximately zero, coercion fails with X::Numeric::Real.
The :D
variant returns the result of that coercion. The :U
variant issues
a warning about using an uninitialized value in numeric context and then returns value 0e0
.
Operators
infix ===
multi infix:<===>(ComplexStr:D $a, ComplexStr:D $b)
ComplexStr
Value identity operator. Returns True
if the Complex
values of $a
and $b
are identical and their Str
values are also identical. Returns False
otherwise.