解释器中的Perl 6函数参数语法(REPL)

时间:2017-07-14 18:19:40

标签: function arguments perl6

解释器中的参数语法似乎存在一些不一致之处。我正在使用最新的Rakudo。请参阅以下终端输出:

$ perl6
To exit type 'exit' or '^D'
> say: "foo"
foo
> say("foo")
foo
> say "foo"
===SORRY!=== Error while compiling:
Two terms in a row
------> say⏏ "foo"
    expecting any of:
        infix
        infix stopper
        statement end
        statement modifier
        statement modifier loop
> 
$ perl6
To exit type 'exit' or '^D'
> say "foo"
foo
> say("foo")
foo
> say: "foo"
foo
> say "foo"
===SORRY!=== Error while compiling:
Two terms in a row
------> say⏏ "foo"
    expecting any of:
        infix
        infix stopper
        statement end
        statement modifier
        statement modifier loop
> 
$ 

似乎在使用“:”或“()”提供参数后,您无法返回使用“”,即空格,提供论据。

或者我错过了什么?

谢谢!!!

lisprog

1 个答案:

答案 0 :(得分:9)

  

say: "foo"

该行调用say子例程。

相反,它声明一个名为say的{​​{3}},然后执行语句"foo"(什么都不做)。

在你的案例中打印"foo"的唯一原因是因为你把它输入到REPL中,它自动打印每行最后一个语句的值。

如果您在普通程序中使用它,它实际上会抛出警告Useless use of constant string "foo" in sink context

  

say "foo" ===SORRY!=== Error while compiling: Two terms in a row ------> say⏏ "foo" expecting any of: infix infix stopper statement end statement modifier statement modifier loop

在您声明了标签之后,此范围中的符号say不再引用具有该名称的内置子例程,而是引用您的自定义标签,并且使用语法错误这样的标签。

但是,错误消息应该理想地解释这一点。我已经statement label了。