在角色 Rational 中§

有关方法 Bridge 的主要文档,请参阅上下文

method Bridge()

返回转换为 Num 的数字。

在 Int 中§

有关方法 Bridge 的主要文档,请参阅上下文

method Bridge(Int:D: --> Num:D)

返回转换为 Num 的整数。

在角色 Real 中§

有关方法 Bridge 的主要文档,请参阅上下文

method Bridge(Real:D:)

默认实现将调用者强制转换为 Num,这也是此方法在核心 Real 类型中的行为。此方法主要用于方便用户实现自定义 Real 类型,其中 Bridge 方法返回最能表示自定义 Real 类型的一个核心 Real 类型(一定是 Num)。反过来,这使得所有核心运算符和方法都可以获得它们可以使用的值。

例如,我们可以实现一个自定义的 Temperature 类型。它具有度量单位和值,这些是在实例化期间给出的。我们可以实现与此类型一起使用的自定义运算符或转换方法。但是,对于常规的数学运算符,我们可以简单地使用 .Bridge 方法将 Temperature 转换为以一种核心数字类型表示的开尔文温度。

class Temperature is Real {
    has Str:D  $.unit  is required where any <K F C>;
    has Real:D $.value is required;
    method new ($value:$unit = 'K'{ self.bless :$value :$unit }
    # Note: implementing .new() that handles $value of type Temperature is left as an exercise 
 
    method Bridge {
        when $!unit eq 'F' { ($!value + 459.67) × 5/9 }
        when $!unit eq 'C' {  $!value + 273.15 }
        $!value
    }
    method gist { self.Str }
    method Str  { "$!value degrees $!unit" }
}
 
sub postfix:<> { Temperature.new: $^value:unit<C> }
sub postfix:<> { Temperature.new: $^value:unit<F> }
sub postfix:<K> { Temperature.new: $^value:unit<K> }
 
my $human := 36.6℃;
my $book  := 451℉;
my $sun   := 5778K;
say $human;                # OUTPUT: «36.6 degrees C␤» 
say $human + $book + $sun# OUTPUT: «6593.677777777778␤» 
say 123+ 456K;           # OUTPUT: «579␤»

从输出的最后两行可以看出,桥接结果的类型并不强制为任何*特定*的核心类型。当我们使用 Rat 实例化 Temperature 或涉及转换时,它是一个 Rat,而当我们使用 Int 实例化 Temperature 时,它是一个 Int

在 Num 中§

有关方法 Bridge 的主要文档,请参阅上下文中的内容

method Bridge(Num:D:)

返回数字。