Очень нужно сильно захотелось написать простой маленький консольный бинарничичек. Конечно же не на пхп ведь мы же не монстры, правда?
Немедленно открываем документацию к 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