使用冒号语法的方法调用错误。没错 但是这是什么意思?

drc*_*law 7 perl6

我做了一个错字,用冒号语法调用一个方法。我错过了冒号和第二个冒号后面的空格,用于命名参数。我用一个简单的类重复了我的问题:

class Test {
    method myMethod  {
        say "myMethod";
        say %_;
    } 
}

Test.new.myMethod:test<this>; #mistyped call
Test.new.myMethod: :test<this>; #actual call
#Test.new.myMethod:"some_string";
Run Code Online (Sandbox Code Playgroud)

输出为:

myMethod
{}
myMethod
{test => this}
Run Code Online (Sandbox Code Playgroud)
  1. 第一个myMethod调用,没有错误,也没有命名参数。
  2. 第二部作品符合预期。
  3. 第三次生成冒号对编译时错误

首次调用的语法是什么意思,为什么不是错误?干杯

rai*_*iph 8

形式的标识符foo:barfoo:<baz>foo:quux<waldo>foo:quux<waldo>:abc<def>等是扩展标识符

符号的长名别名为其短名,即标识符的第一部分,因此在这种情况下myMethod:test<this>别名为myMethod

  • @drclaw:当面对调用`.myMethod:test &lt;this&gt;()`时,Rakudo总是会调用方法`myMethod`,对我来说似乎是个错误;注意,可以通过加引号的方法名称来调用长名称的方法,即`。“ myMethod:test &lt;this&gt;”()`。 (3认同)
  • 嗯..我将阅读更多有关扩展标识符的内容。从您发送的链接中,我有一个后续问题:我还没有为`myMethod:test &lt;this&gt;`定义扩展标识符,那么为什么要调用它呢?这不是唯一的名称吗? (2认同)