class Allomorph isStr { }

The Allomorph class is a common parent class for Raku's dual value types: ComplexStr, IntStr, NumStr, RatStr.

The dual value types (often referred to as allomorphs) allow for the representation of a value as both a string and a numeric type. Typically they will be created for you when the context is "stringy" but they can be determined to be numbers, such as in some quoting constructs:

my$c=<42+0i>; say$c.^name; # OUTPUT: «ComplexStr␤» my$i=<42>; say$i.^name; # OUTPUT: «IntStr␤» my$n=<42.1e0>; say$n.^name; # OUTPUT: «NumStr␤» my$r=<42.1>; say$r.^name; # OUTPUT: «RatStr␤»

As a subclass of both a Numeric class and Str, via the Allomorph class, an allomorph will be accepted where either is expected. However, an allomorph does not share object identity with its Numeric parent class- or Str-only variants:

my ($complex-str,$int-str,$num-str,$rat-str) =< 42+0i 42 42e10 42.1 >; my (Complex$complex,Int$int,Num$num,Rat$rat) =$complex-str,$int-str,$num-str,$rat-str; # OK! myStr@strings=$complex-str,$int-str,$num-str,$rat-str; # OK! # ∈ operator cares about object identity say 42+0i < 42+0i 42 42e10 42.1 >; # OUTPUT: «False␤» say 42 < 42+0i 42 42e10 42.1 >; # OUTPUT: «False␤» say 42e10 < 42+0i 42 42e10 42.1 >; # OUTPUT: «False␤» say 42.1 < 42+0i 42 42e10 42.1 >; # OUTPUT: «False␤» 

Please see the Numerics page for a more complete description on how to work with these allomorphs.

Methods§

method ACCEPTS§

multimethodACCEPTS(Allomorph:D: Any:D \a)

If the a parameter is Numeric (including another allomorph), checks if invocant's Numeric value ACCEPTSa. If the a parameter is Str, checks if invocant's Str value ACCEPTSa. If the a parameter is anything else, checks if both Numeric and Str values of the invocant ACCEPTSa.

say"5.0"~~ <5>; # OUTPUT: «False␤» say 5.0 ~~ <5>; # OUTPUT: «True␤» say <5.0> ~~ <5>; # OUTPUT: «True␤»

method Bool§

multimethodBool(::?CLASS:D:)

Returns False if the invocant is numerically 0, otherwise returns True. The Str value of the invocant is not considered.

Note: For the Allomorph subclass RatStr also see Rational.Bool.

method chomp§

methodchomp(Allomorph:D:)

Calls Str.chomp on the invocant's Str value.

method chop§

methodchop(Allomorph:D: |c)

Calls Str.chop on the invocant's Str value.

method comb§

methodcomb(Allomorph:D: |c)

Calls Str.comb on the invocant's Str value.

method fc§

methodfc(Allomorph:D:)

Calls Str.fc on the invocant's Str value.

method flip§

methodflip(Allomorph:D:)

Calls Str.flip on the invocant's Str value.

method lc§

methodlc(Allomorph:D:)

Calls Str.lc on the invocant's Str value.

method pred§

methodpred(Allomorph:D:)

Calls Numeric.pred on the invocant's numeric value.

method raku§

multimethodraku(Allomorph:D:)

Return a representation of the object that can be used via EVAL to reconstruct the value of the object.

method samecase§

methodsamecase(Allomorph:D: |c)

Calls Str.samecase on the invocant's Str value.

method samemark§

methodsamemark(Allomorph:D: |c)

Calls Str.samemark on the invocant's Str value.

method split§

methodsplit(Allomorph:D: |c)

Calls Str.split on the invocant's Str value.

method Str§

methodStr(Allomorph:D:)

Returns the Str value of the invocant.

method subst§

methodsubst(Allomorph:D: |c)

Calls Str.subst on the invocant's Str value.

method subst-mutate§

methodsubst-mutate(Allomorph:D \SELF: |c)

Calls Str.subst-mutate on the invocant's Str value.

method substr§

methodsubstr(Allomorph:D: |c)

Calls Str.substr on the invocant's Str value.

method substr-rw§

methodsubstr-rw(Allomorph:D \SELF: $start= 0,$want=Whatever)

Calls Str.substr-rw on the invocant's Str value.

method succ§

methodsucc(Allomorph:D:)

Calls Numeric.succ on the invocant's numeric value.

method tc§

methodtc(Allomorph:D:)

Calls Str.tc on the invocant's Str value.

method tclc§

methodtclc(Allomorph:D:)

Calls Str.tclc on the invocant's Str value.

method trim§

methodtrim(Allomorph:D:)

Calls Str.trim on the invocant's Str value.

method trim-leading§

methodtrim-leading(Allomorph:D:)

Calls Str.trim-leading on the invocant's Str value.

method trim-trailing§

methodtrim-trailing(Allomorph:D:)

Calls Str.trim-trailing on the invocant's Str value.

method uc§

methoduc(Allomorph:D:)

Calls Str.uc on the invocant's Str value.

method WHICH§

multimethodWHICH(Allomorph:D:)

Returns an object of type ValueObjAt which uniquely identifies the object.

my$f=<42.1e0>; say$f.WHICH; # OUTPUT: «NumStr|Num|42.1|Str|42.1e0␤»

Operators§

infix cmp§

multi infix:<cmp>(Allomorph:D $a, Allomorph:D $b)

Compare two Allomorph objects. The comparison is done on the Numeric value first and then on the Str value. If you want to compare in a different order then you would coerce to a Numeric or Str value first:

my$f=IntStr.new(42,"smaller"); my$g=IntStr.new(43,"larger"); say$fcmp$g; # OUTPUT: «Less␤» say$f.Strcmp$g.Str; # OUTPUT: «More␤»

infix eqv§

multi infix:<eqv>(Allomorph:D $a, Allomorph:D $b--> Bool:D)

Returns True if the two Allomorph$a and $b are of the same type, their Numeric values are equivalent and their Str values are also equivalent. Returns False otherwise.

Typegraph§

Type relations for Allomorph
raku-type-graphAllomorphAllomorphStrStrAllomorph->StrMuMuAnyAnyAny->MuCoolCoolCool->AnyStringyStringyStr->CoolStr->StringyNumericNumericComplexComplexComplex->CoolComplex->NumericComplexStrComplexStrComplexStr->AllomorphComplexStr->ComplexRealRealReal->NumericNumNumNum->CoolNum->RealNumStrNumStrNumStr->AllomorphNumStr->NumIntIntInt->CoolInt->RealIntStrIntStrIntStr->AllomorphIntStr->IntRationalRationalRational->RealRatRatRat->CoolRat->RationalRatStrRatStrRatStr->AllomorphRatStr->Rat

Expand chart above

close