这来自this
perl6/doc
issue,也指these questions in the IRC channel
documentation指定如何使用Signature literal约束可调用对象的参数:
sub f(&c:(Int, Str)) { say c(10, 'ten') };
(这会将函数参数限制为仅将Integer和String作为参数的函数参数。)
但是,在某些其他情况下,可以使用where
约束,例如,如果需要限制Arity或返回值。但是,有没有更简单的方法或语法呢?
答案 0 :(得分:7)
要强制使用例如2的整数,则也可以使用签名文字:
sub foo(&x:($,$)) {
x(1,2)
}
然后这有效:
foo -> $a, $b { say $a + $b }
死了:
foo -> $a { say $a }
此签名文字仅表示“任何两个参数”。还可以通过类似的方式来限制返回类型:
sub foo(&x:(--> Int)) {
say x()
}
这意味着有效:
foo sub (--> Int) { 42 }
但这死了:
foo sub () { "oops" }