Очень нужно сильно захотелось написать простой маленький консольный бинарничичек. Конечно же не на пхп ведь мы же не монстры, правда?
Немедленно открываем документацию к racket чтобы узнать как это делать:
(command-line optional-name-expr optional-argv-expr
flag-clause ...
finish-clause)
optional-name-expr =
| #:program name-expr
optional-argv-expr =
| #:argv argv-expr
flag-clause = #:multi flag-spec ...
| #:once-each flag-spec ...
| #:once-any flag-spec ...
| #:final flag-spec ...
| #:usage-help string ...
| #:help-labels string ...
| #:ps string ...
flag-spec = (flags id ... help-spec body ...+)
| (flags => handler-expr help-expr)
flags = flag-string
| (flag-string ...+)
help-spec = string
| (string-expr ...+)
finish-clause =
| #:args arg-formals body ...+
| #:handlers handlers-exprs
arg-formals = rest-id
| (arg ...)
| (arg ...+ . rest-id)
arg = id
| [id default-expr]
handlers-exprs = finish-expr arg-strings-expr
| finish-expr arg-strings-expr help-expr
| finish-expr arg-strings-expr help-expr
unknown-expr
Пожалукйста, потратьте минутку и насладитесь этим шедевром форматирования.
Спасибо, больше не надо этого делать. Если вы не поняли как это работает, то вот вам настоящий пример от человека который понял:
(define parser
(command-line
#:usage-help
"Here you can write a general description of your program"
"You can have multiple strings to make multiple lines"
#:once-each
[("-m" "--my-parameter") MY-PARAMETER-NAME
"write a short description of what setting MY-PARAMETER-NAME does"
(my-parameter (string->number MY-PARAMETER-NAME))]
[("-a" "--another-parameter") ANOTHER-PARAM
"a little description of ANOTHER-PARAM"
(another-parameter (string=? "true" ANOTHER-PARAM))]
[("-s" "--string") A-STRING
"what is A-STRING?"
(a-string A-STRING)]
#:args () (void)))
Очень мне нравится как в они в этом racket’е любят использовать магические строки типа #:once-each которые непонятно что делают и никак не автодополняются официальной IDE.
Очень, очень захватывающе. Пожалуй, на этом с racket я закончу.
2025.01.26 14:54