在签名文字中§
有关 强制转换类型,请参阅主要文档 上下文
要接受一种类型但自动将其强制转换为另一种类型,请使用接受的类型作为目标类型的一个参数。如果接受的类型是 Any
,则可以省略它。
sub f(Int(Str) , Str() )f '10', 10;# OUTPUT: «Int Str»sub foo(Date(Str) ) ;foo "2016-12-01";# OUTPUT: «Date2016-12-01»
如果存在强制转换类型,则通过调用带有强制转换类型名称的方法来执行强制转换。在此示例中,我们正在 Str
类上调用内置方法 Date
。该方法假定返回正确的类型,目前不会对结果执行其他检查。
强制转换也可以在返回类型上执行
sub square-str (Int --> Str(Int))for 2,4, *² … 256 -># OUTPUT: «2² is 1 figures long# 4² is 2 figures long# 16² is 3 figures long# 256² is 5 figures long»
在此示例中,将返回类型强制转换为 Str
允许我们直接应用字符串方法,例如字符数。
注意:相应的方法必须在参数上可用,因此在尝试强制转换自定义类型时要小心。
sub bar(Foo(Int) )bar(3);# OUTPUT: «Impossible coercion from 'Int' into 'Foo': no acceptable coercion method found»