Использование двоеточия в вызовах методов и функций в Perl 6
Мне интересно, что двоеточия имеют отношение к вызовам методов и функций в Perl 6. Для справки, я использую версию perl6 2015.05-55-gd84bbbc, построенную на версии MoarVM 2015.05.
Я только что увидел следующее вТестирование Perl6 (S32-io) (Я добавил комментарий):
$fh.print: "0123456789A"; # prints '0123456789A' to the file
Насколько я могу судить, это эквивалентно:
$fh.print("0123456789A"); # prints '0123456789A' to the file
Оба из них, кажется, принимают несколько аргументов и хорошо сглаживают списки:
$fh.print: "012", "345", "6789A"; # prints '0123456789A' to the file
$fh.print("012", "345", "6789A"); # prints '0123456789A' to the file
my @a = <012 345 6789A>;
$fh.print(@a); # prints '0123456789A' to the file
$fh.print: @a; # prints '0123456789A' to the file
Должна быть какая-то причина иметь эти два разных синтаксиса. Есть ли причина использовать тот или иной синтаксис?
Я также заметил, что мы должны использовать либо:
или же()
с печатью, когда используется как метод:
$fh.print(@a); # Works
$fh.print: @a; # Works!
$fh.print @a; # ERROR!
Существует также несколько интересных действий при использовании двоеточия с функциейprint
, В этом случае,:
а также()
не эквивалентны:
print @a; # Prints '0123456789A' (no newline, just like Perl 5)
print(@a); # Ditto
print: @a; # Prints '012 345 6789A' followed by a newline (at least in REPL)
print @a, @a; # Error (Two terms in a row)
print: @a, @a; # Prints '012 345 6789A 012 345 6789A' followed by a newline (in REPL)
Затем я попытался использовать печать в файле сценария. Это работает для печати на стандартный вывод:
print @a;
Однако это не выводит на стандартный вывод:
print: @a, @a;
Но версия метода работает нормально:
$fh.print: @a, @a; # Prints '0123456789A0123456789A' to the file
Я чувствую, что почти понимаю это, но не могу выразить это словами. Может кто-нибудь объяснить, пожалуйста, эти варианты использования печати. Кроме того, изменится ли это поведение из-за Рефактора Великого Списка?