есть функция menu()
которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать.
Есть ли более красивый способ реализовать такой функционал?
function menu()
println("Выберите действие: ")
println("1. ...\n
2. ...\n
3. ...\n
4. ...\n
5. ....
")
choice = readline()
if choice == "1"
f1()
elseif choice == "2"
f2()
elseif choice == "3"
f3()
....
else exit()
end
end
Идиоматически в Julia делают choice == "1" && f1() choice == "2" && f2() choice == "3" && f3()
https://github.com/nick-paul/TerminalMenus.jl
Ну да, я не про ввод в терминале, а вообще про избежание elseif
Можно попробовать через pattern matching https://github.com/JuliaServices/Match.jl
If - это отличный вариант, единственно, что с точки зрения тестирования и будущей поддержки кода, лучше использовать какие-нибудь аналоги command pattern. Так как в Джулии multiple dispatch, то на команду в меню возвращать структуру соответствующего типа, а потом исполнять её.
типа такого получается (например) 1) распарсили считанный с клавиатуры символ как x :: Int 2) определили десять функций foo(x :: Val{1}) = ..., foo(Val{2}) = ... , ... и т.д. 3) вызвали foo(Val(x))
Обсуждают сегодня