裸字规则

jjm*_*elo 5 perl6

Barewords可以在Pair声明的左侧使用(这还没有记录,我现在正在解决这个问题,但我希望一切正确).但是,我还没有找到什么是什么,什么不会被认为是任何地方的裸字密钥.

这似乎有效

say (foo'bar-baz => 3); # OUTPUT: «foo'bar-baz => 3?»
Run Code Online (Sandbox Code Playgroud)

事实并非如此

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

所以它显然遵循与普通标识符相同的语法.那是对的吗?我在这里错过了什么吗?

Jon*_*ton 10

Perl 6中没有裸字,因为它们存在于Perl 5中,而且该术语在Perl 6中根本没有使用.

我们可以将两种情况称为"裸标识符":

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

这两种情况只是在它们都是termPerl 6语法中的s的情况下相关,并且它们都希望解析a identifier,它遵循问题中链接的标准规则.哪个胜利由最长令牌匹配语义决定; 的限制,有可能只标识符之间的水平空白和=>存在以确保标识符,空格,和=>将一起被算作声明前缀,因此壳体1将总是战胜壳体2.

  • 我从S02设计文档中获取了"裸标识符"."自动引用的标识符"可能是合适的,但这可能会减少一个重要的区别:不将键放在引用构造中的对形式将在参数列表的上下文中命名为参数,而带引号的那些不会是.所以也许它就是整个结构 - 一个胖箭对是箭头左侧的文字标识符 - 我们想要关注它们. (2认同)