Нотация имя/арность дает имя и арность функции. «арность» — это количество аргументов (т. е. параметров), поэтому, например,explore/0 означает, что вы просто напишете explode
без каких-либо аргументов, а map/1 означает, что вы напишете что-то вроде map(f)
.
Тот факт, что функции 0-арности вызываются по имени без каких-либо круглых скобок, делает нотацию особенно удобной. Тот факт, что имя функции может иметь несколько определений одновременно (каждое определение имеет различную арность), позволяет легко различать их.
Это обозначение не используется в программах jq, но используется в выводе (нового) встроенного фильтра builtins/0
.
Напротив, в некоторых других языках программирования он (или его близкий вариант, например, модуль:имя/арность в Erlang) также является частью языка.
Почему?
Существуют различные трудности, которые обычно возникают при попытке внедрить нотацию, подходящую для языков, в которых диспетчеризация методов основана на типах, на те, в которых диспетчеризация основана исключительно на арности.
Первый, как уже отмечалось, связан с функциями 0-арности. Это особенно проблематично для jq, поскольку функции 0-арности вызываются в jq без круглых скобок.
Во-вторых, функции jq, как правило, не требуют, чтобы их аргументы относились к какому-либо одному типу jq. Необходимость писать что-то вроде nth(string+number)
, а не просто nth/1
было бы в лучшем случае утомительным.
Вот почему руководство усиленно избегает использования нотации в стиле «имя (тип)». Таким образом, мы видим, например, startswith(str)
, а не startswith(string)
. То есть имена параметров в документации явно являются просто именами, хотя, конечно, они часто дают сильные намеки на тип.
Если вам интересно, почему соглашение «имя/арность» не задокументировано в руководстве, это, вероятно, в основном потому, что документация была в основном написана до того, как jq поддерживал функции с несколькими арностями.
Подводя итог, можно заставить работать любую схему обозначений, но name/arity
(1) лаконична; (2) точный в контексте jq; (3) простой в освоении; и (4) широко используется для языков, ориентированных на арность, по крайней мере, на этой планете.
person
peak
schedule
21.01.2017