Я пишу приложение командной строки, которое использует клавиатуру, чтобы показать пользователю выбранную в данный момент опцию, а также выбор опции и другие функции, такие как отображение всех возможных команд.Лучший способ сопоставления ввода с клавиатуры методам в ruby
Мой вопрос: какие лучшие практики в рубине для этого? В настоящее время у меня есть класс input_handler, который инициализируется классом, который я хочу выполнить. Обработчик ввода использует класс команд, который фактически запускает методы, прикрепленные к команде. Код у меня выглядит, как показано ниже:
class Command
attr_reader :key, :alt_name, :action_object, :action, :registered
def initialize(key, alt_name=nil)
@key = key.to_s
@alt_name = alt_name == nil ? @key.to_sym : alt_name.to_sym
@registered = false
end
def send(input)
@action_object.send(action, input)
end
def register(action_object, action)
@action_object = action_object
@action = action
@registered = true
end
def is_command?(key)
@key == key.to_s || @alt_name == key.to_s.to_sym
end
end
class InputHandler
include InputHelper
attr_reader :commands
def initialize(action_object)
@action_object = action_object
generate_commands
end
#Returns whatever the command action returns
def get_input
input = read_char
get_command(input).send(input) if get_command(input).registered
end
def register_commands(command_hash)
command_hash.keys.each do |key|
get_command(key).register(@action_object, command_hash[key])
end
end
def registered
@commands.select {|command| command.registered == true}
end
end
Я интересно, если я после надлежащего способа отображения методов на нажатие клавиш (метод read_char читает первый ввод ключа без необходимости ввода быть нажата). Является ли способ, которым я его написал, подвержен сложной отладке, или это то, как я написал это слишком косвенно, чтобы легко вводить ошибки?
«Я следую правильному пути ...» Это работает? – iain
Прежде чем написать очень длинный ответ о том, как это сделать, используете ли вы Linux, Mac или Windows? – Schylar
Я на Ubuntu Linux –