解释器中的参数语法似乎存在一些不一致之处。我正在使用最新的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
答案 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了。