Неверный вызов метода с синтаксисом двоеточия. Нет ошибок. Но что это значит? - PullRequest
7 голосов
/ 14 марта 2019

Я сделал опечатку, вызвав метод с синтаксисом двоеточия.Я пропустил пробел после двоеточия и второго двоеточия для названного параметра.Я повторил свою проблему с помощью простого класса:

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";

Вывод:

myMethod
{}
myMethod
{test => this}
  1. Первый вызов myMethod без ошибок и без именованных аргументов.
  2. Второй работает, как и ожидалось.
  3. Третий генерирует ошибку времени компиляции пары двоеточий

Что означает синтаксис первого вызова и почему он не является ошибкой?Приветствия

1 Ответ

8 голосов
/ 14 марта 2019

Идентификаторы вида foo:bar, foo:<baz>, foo:quux<waldo>, foo:quux<waldo>:abc<def> и т. Д. Являются расширенными идентификаторами .

Длинное имя символа связывается с его коротким именем, первым компонентом идентификатора, поэтому в этом случае myMethod:test<this> связывается с myMethod.

...