Украшение лямбдой [дубликат]

Проверьте наличие нескольких зависимостей и сообщите статус конечным пользователям

for cmd in "latex" "pandoc"; do
  printf "%-10s" "$cmd"
  if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
done

Пример вывода:

latex     OK
pandoc    missing

Настройте 10 на максимальную длину команды. Не автоматический, потому что я не вижу многословного способа POSIX: Как выровнять столбцы таблицы, разделенной пробелом, в Bash?

5
задан Martijn Pieters 5 April 2016 в 13:29
поделиться

1 ответ

Глагол определения функций не разрешает вызовы с дополнительными пунктирными именами; синтаксис ограничивается пунктирными именами и необязательным вызовом в конце :

decorated      ::=  decorators (classdef | funcdef)
decorators     ::=  decorator+
decorator      ::=  "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
funcdef        ::=  "def" funcname "(" [parameter_list] ")" ":" suite
dotted_name    ::=  identifier ("." identifier)*

Обратите внимание, что это не полное выражение, но очень ограниченное подмножество.

Это перекликается с PEP, который гласит:

Оператор декоратора ограничен тем, что он может принять, - произвольные выражения не будут работать. Гвидо предпочел это из-за чувства кишки [17].

и

Обоснование наличия функции, возвращающей декоратор, состоит в том, что часть после Знак @ можно считать выражением (хотя синтаксически ограничивается только функцией), и все, что возвращает это выражение, вызывается. См. Декларационные аргументы [16].

Акцент мой.

Обоснование заключается в том, что Гвидо считает, что нет реального варианта использования для разрешения :

Поэтому, хотя в будущем было бы довольно легко изменить синтаксис на @test, я хотел бы придерживаться более ограниченной формы, если не будет представлен реальный прецедент, где позволяя @test повысить читаемость. (@foo () не работает, потому что я не ожидаю, что вам это понадобится).

Вам нужно будет убедить Guido и других основных разработчиков что ваш случай - это надлежащая утилита, достойная отмены этих ограничений!

6
ответ дан Martijn Pieters 25 August 2018 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: