В чем разница между: D и: D:?

Я просматривал Perl 6 документы на shift процедура и увидел этот фрагмент:

определено как:

multi sub    shift(Array:D )
multi method shift(Array:D:)

Я знаю :D означает Array is defined, а не Any или Nil, а что :D:? Его очень трудно найти.

в этом разделе типа signature docs содержит больше примеров синтаксиса, но (насколько я могу судить) не объясняет его.

1 ответов


В invocant метода передается как неявный первый аргумент. Если вы хотите использовать явный параметр в сигнатуре (например, добавить смайлик типа :D или просто дать ему более описательное имя), вам нужно разделить его с : вместо , из остальной части списка параметров. Это необходимо даже в случае пустого списка, чтобы его можно было устранить из подписи с регулярным позиционным параметром.

более подробную информацию можно найдено в проектной документации.