焉知非鱼

大雨像阳光般倾落, 边失去边拥有着

签名中的 :D 和 :U 是什么?

2017-08-21


在 Rakudo 中, 类和其他类型都是对象, 并且通过它们自身类型的类型检测。

例如, 如果你定义一个变量:

my Int $x = 42;

那么你不仅可以给这个变量赋值整数(即, Int 类的实例), 而且可以给该变量赋值 Int 类型本身:

$x = Int

如果你想排除类型对象, 你可以在类型后面追加 :D 类型微笑符, 它代表着 “definite”(有定义的):

my Int:D $x = 42;
$x = Int;      # dies with: 
                     # Type check failed in assignment to $x; 
                     # expected Int:D but got Int 

同样地, :U 代表未定义的(undefined)值, 即, 类型对象。

要显示地允许类型对象或实例, 那么使用 :_

更多例子, 见 smiley