Что означает обозначение jq ‹функция›/‹число›?

На различных веб-страницах я вижу ссылки на функции jq с косой чертой и номером после них. Например:

walk/1

Я обнаружил, что приведенная выше нотация используется в stackoverflow< /а> страница.

Я не смог найти на странице jq Manual определение того, что означает эта нотация. Я предполагаю, что это может указывать на то, что функция walk принимает 1 аргумент. Если это так, мне интересно, почему не используется более осмысленная нотация, например, используемая с подписями в C++, Java и других языках:

<function>(type1, type2, ..., typeN)

Кто-нибудь может подтвердить, что означает обозначение <function>/<number>? Используются ли другие варианты?


person Steve Amerige    schedule 21.01.2017    source источник


Ответы (1)


Нотация имя/арность дает имя и арность функции. «арность» — это количество аргументов (т. е. параметров), поэтому, например,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
comment
Поскольку arity не используется в программах jq, почему это обозначение используется в обсуждениях jq? Возможны более содержательные обозначения, которые помогли бы формализовать руководство. Например, в руководстве можно увидеть startswith(str). Поскольку разрешенные типы в jq точно определены как один из null|boolean|number|string|array|object, то я думаю, что startswith(string) будет лучше, чем startswith/1 или то, что сейчас есть в руководстве. element может использоваться для обозначения любого типа. Можно явно указать альтернативы, как в string|array. (void) или опущено может указывать 0 аргументов. Спасибо! - person Steve Amerige; 22.01.2017
comment
@SteveAmerige Это другой вопрос, чем то, что означает обозначение. Если вы хотите знать, почему это используется, лучше всего обсудить это с автором jq. - person chepner; 22.01.2017
comment
@chepner Согласен. Я проголосовал и принял ответ. Я тоже постараюсь узнать, почему. Но, вы правы, я получил ответ на вопрос, который задавал. Счастливые дни! - person Steve Amerige; 22.01.2017
comment
Сейчас (год спустя) в руководстве есть подсказка, указанная в разделе встроенных функций. Поскольку все главные гуру jq используют это сокращение в своих примерах и обсуждениях, это является серьезным препятствием для входа для таких скромных нубов, как я. Чувствую себя Алисой на чаепитии. - person charles ross; 26.02.2018
comment
@CharlesRoss - Итак, возможно, вы можете объяснить, почему ворон похож на письменный стол? Булочки? - person peak; 26.02.2018
comment
невар! ты заставил меня искать. - person charles ross; 26.02.2018