Как юлианский способ объединяет позиционные, ключевые и стандартные аргументы и документирует их? - PullRequest
0 голосов
/ 07 ноября 2018

Меня интересует функция, которая запрашивает у пользователя ввод с позиционными аргументами, ключевыми словами и аргументами по умолчанию, который является "юлианским". Я также хочу, чтобы документация была "Джулиана".

Вот пример, который я придумал:

"""
    ask([prompt::String="prompt> "] [kw_prompt::String=""])::String

Prompt user for input and read and return a string from `stdin`.

If keyword argument, `kw_prompt`, is supplied, it will be the prompt.

If positional argument, `prompt`, is supplied, it will be the prompt.

If no parameter is supplied, the prompt will be "prompt> ".

# Examples
```julia_repl
julia> ask()
prompt> test
"test"

julia> ask("My prompt: ")
My prompt: test
"test"

julia> ask(kw_prompt="A long prompt >>> ")
A long prompt >>> test
"test"
```
"""
function ask(prompt::String="prompt> "; kw_prompt::String="")::String
    if !isempty(kw_prompt)
        print(kw_prompt)
    elseif !isempty(prompt)
        print(prompt)
    end
    return readline()
end # ask()

Любые предложения относительно кода или документации?

1 Ответ

0 голосов
/ 08 ноября 2018

Я бы не назвал одновременно поддержку позиционных и ключевых аргументов Джулиана. Просто выберите один.

Если вам действительно нужно, затените эту деталь в документации. Просто соедините их вместе:

julia> """
           ask([prompt="prompt>"])
       """
       function ask(_prompt="prompt> "; prompt=_prompt)
           print(prompt)
           return readline()
       end
ask (generic function with 2 methods)

julia> ask();
prompt>

julia> ask("foo> ");
foo>

julia> ask(prompt="bar> ");
bar>
...