代码之家  ›  专栏  ›  技术社区  ›  jjmerelo

如何在子程序中指定可调用参数的属性

  •  5
  • jjmerelo  · 技术社区  · 6 年前

    这是从 this perl6/doc issue 也指 these questions in the IRC channel

    这个 documentation 指定如何使用 Signature literal :

    sub f(&c:(Int, Str))  { say c(10, 'ten') };
    

    (这会将函数参数限制为仅接受整数和字符串作为参数的函数参数)。

    但是,在其他一些情况下, where 可以使用约束,例如,如果需要限制相关性或返回值。但是,有没有更简单的方法或语法来实现这一点呢?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Jonathan Worthington    6 年前

    为了执行例如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" }
    
    推荐文章