【发布时间】:2022-01-17 22:07:32
【问题描述】:
使用当前的 Rakudo 编译器 (v2021.10),以 ::(…) 形式声明的 symbols 不需要遵循 rules for identifiers,即使它们声明了例程的名称。
这意味着以下代码会产生指定的输出:
class C { method ::("A method name that's also a sentence!") { say "this works"} }
sub ::("☺") { say "also works" }
C."A method name that's also a sentence!"(); # OUTPUT: «this works»
&::("☺")(); # OUTPUT: «also works»
我的问题是这是否是有效的Raku/一个有意的功能,或者它是否是偶然的或特定的 Rakudo。我在 Raku 文档中没有看到任何提及此语法的内容,也没有看到 Roast 测试涵盖创建这样的符号。
(有一个有点相关的Roast test 关于在符号de引用中使用特殊字符。但是,除了不直接在点之外,该测试包含稍微无用的评论“注意:我不是 100% 确定这是合法的语法”。该评论(和该测试)是 13 多年前添加的,因此该领域似乎没有引起太多关注。)
我问的部分原因是,如果合法/有意,这种语法似乎在特定情况下可能非常有用(特别是对于调用语法更好的方法)。它让我想起了一点Kotlin's syntax`for allowing spaces in backtick delimited method names`。因此,如果它是 Raku 的一部分,我想使用这种语法(谨慎使用!)并将其添加到文档中。
【问题讨论】:
标签: methods symbols raku identifier rakudo