裸词规则

时间:2018-12-30 12:25:16

标签: perl6

可以在Pair声明的左侧使用关键词(尚未记录,我正在解决this issue right now,但是我想使所有内容正确)。但是,我在任何地方都没有发现什么是什么,什么也不会被认为是裸字键。

这似乎可行

say (foo'bar-baz => 3); # OUTPUT: «foo'bar-baz => 3␤»

这不是

say (foo-3 => 3); # OUTPUT: «(exit code 1) ===SORRY!=== Error while compiling /tmp/jorTNuKH9V␤Undeclared routine:␤    foo used at line 1␤␤»

因此,它显然遵循the same syntax as the ordinary identifiers。那是对的吗?我在这里想念东西吗?

1 个答案:

答案 0 :(得分:10)

Perl 6中没有隐词,因为它们存在于Perl 5中,并且在Perl 6中根本没有使用该术语。

在两种情况下,我们可以将其称为“裸标识符”:

  1. 一个标识符,其后紧跟零个或多个水平空白字符(\h*),然后是字符=>。这将左侧的标识符作为对键,并将在=>之后解析的项作为对值。这是一个完全的句法决定;例如,带有该标识符的子或类型的存在不会产生任何影响。
  2. 标识符,后跟空格(或其他一些语句分隔符或终止符)。如果已经有该名称的类型,则将其编译为对该类型对象的引用。否则,它将始终被视为子调用。如果尚无该名称的子声明,则将其视为对后声明的子项的调用,如果以后未声明该名称的子项,则将在CHECK时产生错误。

这两种情况仅在以下两种意义上相关:在Perl 6语法中它们都是term的情况,并且它们都希望解析{{3}之后的identifier }。哪个获胜取决于最长令牌匹配语义;存在这样的限制:标识符和=>之间可能只有水平空白,以确保将标识符,空白和=>一起计为声明性前缀,因此情况1总是会获胜在案例2中。