class Allomorph is Str { }

Allomorph 类是 Raku 双重值类型的公共父类:ComplexStrIntStrNumStrRatStr

双重值类型(通常称为 同形异位词)允许将值表示为字符串和数字类型。通常,当上下文为“字符串”时,它们将为您创建,但可以确定它们是数字,例如在一些 引用构造

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␤»

作为 Numeric 类和 Str 的子类,通过 Allomorph 类,同形异位词将被接受在预期任何一个的地方。但是,同形异位词不与其 Numeric 父类或 Str 专用变体共享对象标识

my ($complex-str$int-str$num-str$rat-str)
           = < 42+0i 42 42e10 42.1 >;
 
my (Complex $complexInt $intNum $numRat $rat)
           =  $complex-str$int-str$num-str$rat-str;  # OK! 
 
my Str @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␤» 

有关如何使用这些同形异位词的更完整描述,请参见 数字页面

方法§

方法 ACCEPTS§

multi method ACCEPTS(Allomorph:D: Any:D \a)

如果 a 参数是 Numeric(包括另一个 同形异位词),则检查调用者的 Numeric 值是否 ACCEPTS a。如果 a 参数是 Str,则检查调用者的 Str 值是否 ACCEPTS a。如果 a 参数是其他任何内容,则检查调用者的 NumericStr 值是否 ACCEPTS a

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

方法 Bool§

multi method Bool(::?CLASS:D:)

如果调用者在数字上为 0,则返回 False,否则返回 True。不考虑调用者的 Str 值。

注意:对于 Allomorph 子类 RatStr,另请参见 Rational.Bool

方法 chomp§

method chomp(Allomorph:D:)

在调用者的 Str 值上调用 Str.chomp

方法 chop§

method chop(Allomorph:D: |c)

在调用者的 Str 值上调用 Str.chop

方法 comb§

method comb(Allomorph:D: |c)

在调用者的 Str.comb 值上调用 Str

方法 fc§

method fc(Allomorph:D:)

在调用者的 Str.fc 值上调用 Str

方法 flip§

method flip(Allomorph:D:)

在调用者的 Str.flip 值上调用 Str

方法 lc§

method lc(Allomorph:D:)

在调用者的 Str.lc 值上调用 Str

方法 pred§

method pred(Allomorph:D:)

在调用者的数字值上调用 Numeric.pred

方法 raku§

multi method raku(Allomorph:D:)

返回一个对象的表示,该表示可以通过 EVAL 来重建该对象的价值。

方法 samecase§

method samecase(Allomorph:D: |c)

在调用者的 Str.samecase 值上调用 Str

方法 samemark§

method samemark(Allomorph:D: |c)

在调用者的 Str.samemark 值上调用 Str

方法 split§

method split(Allomorph:D: |c)

在调用者的 Str.split 值上调用 Str

方法 Str§

method Str(Allomorph:D:)

返回调用者的 Str 值。

方法 subst§

method subst(Allomorph:D: |c)

在调用者的 Str.subst 值上调用 Str

方法 subst-mutate§

method subst-mutate(Allomorph:D \SELF: |c)

在调用者的 Str.subst-mutate 值上调用 Str

方法 substr§

method substr(Allomorph:D: |c)

在调用者的 Str.substr 值上调用 Str

方法 substr-rw§

method substr-rw(Allomorph:D \SELF: $start = 0$want = Whatever)

在调用者的 Str.substr-rw 值上调用 Str

方法 succ§

method succ(Allomorph:D:)

调用调用者的数字值上的 Numeric.succ

方法 tc§

method tc(Allomorph:D:)

调用调用者的 Str 值上的 Str.tc

方法 tclc§

method tclc(Allomorph:D:)

调用调用者的 Str 值上的 Str.tclc

方法 trim§

method trim(Allomorph:D:)

调用调用者的 Str 值上的 Str.trim

方法 trim-leading§

method trim-leading(Allomorph:D:)

调用调用者的 Str 值上的 Str.trim-leading

方法 trim-trailing§

method trim-trailing(Allomorph:D:)

调用调用者的 Str 值上的 Str.trim-trailing

方法 uc§

method uc(Allomorph:D:)

调用调用者的 Str 值上的 Str.uc

方法 WHICH§

multi method WHICH(Allomorph:D:)

返回一个 ValueObjAt 类型的对象,该对象唯一标识该对象。

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

运算符§

中缀 cmp§

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

比较两个 Allomorph 对象。比较首先在 Numeric 值上进行,然后在 Str 值上进行。如果您想以不同的顺序进行比较,那么您会首先强制转换为 NumericStr

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

中缀 eqv§

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

如果两个 Allomorph $a$b 是同一种类型,它们的 Numeric 值是 等价的,并且它们的 Str 值也是 等价的,则返回 True。否则返回 False

类型图§

Allomorph 的类型关系
raku-type-graph Allomorph Allomorph Str Str Allomorph->Str Mu Mu Any Any Any->Mu Cool Cool Cool->Any Stringy Stringy Str->Cool Str->Stringy Numeric Numeric Real Real Real->Numeric Int Int Int->Cool Int->Real IntStr IntStr IntStr->Allomorph IntStr->Int Num Num Num->Cool Num->Real NumStr NumStr NumStr->Allomorph NumStr->Num Complex Complex Complex->Cool Complex->Numeric ComplexStr ComplexStr ComplexStr->Allomorph ComplexStr->Complex Rational Rational Rational->Real Rat Rat Rat->Cool Rat->Rational RatStr RatStr RatStr->Allomorph RatStr->Rat

展开上面的图表