这个问题最初是由lookatme
Perl6 IRC 频道发布的。最初的意图是通过使用子集或任何其他可能的方式来约束 Callable 。它适用于签名,但是:
subset WalkCb of Callable where *.signature ~~ :(Int $a);
my WalkCb $x = sub (Int $a) { return $a; };
返回
«Type check failed in assignment to $x; expected WalkCb but got Sub (sub (Int $a) { #`(Sub...) in block <unit> at <tmp> line 1»
声明的其他变体返回类似的消息。什么是正确的语法?