В чем разница между: 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
или просто дать ему более описательное имя), вам нужно разделить его с :
вместо ,
из остальной части списка параметров. Это необходимо даже в случае пустого списка, чтобы его можно было устранить из подписи с регулярным позиционным параметром.
более подробную информацию можно найдено в проектной документации.