Я понимаю, что это может быть дубликат метода Любого эквивалента метода public_send в Ruby? а>. Я хотел бы объяснить, что делаю, и, возможно, кто-нибудь сможет посоветовать.
Я портировал приложение Ruby в течение последних нескольких дней, чтобы изучить Crystal. Мне пришлось вырезать много функций из-за отсутствия send
, но сегодня я затронул главную артерию в своей программе.
У меня есть хеш, который содержит нажатие клавиши как ключ и метод как значение. В зависимости от того, какая клавиша нажата, вызывается соответствующий метод. Очевидно, что для реализации того же самого используется send
.
Из связанного вопроса я понимаю, что Crystal скомпилирован, поэтому вызовы динамических методов не разрешены. Однако, если вы посмотрите на редактор Vim, пользователь также может сопоставить ключи с методами. А vi (m) написано на C.
Интересно, не упустил ли я что-нибудь.
Я знаю, что, вероятно, мог бы жестко закодировать оператор switch с каждой клавишей и вызвать соответствующий метод, но это все еще не позволяет пользователю назначать клавишу методу. Есть ли альтернатива этому методу очень большого выключателя?
(Я предполагаю, что вместо того, чтобы проверять ключ в части when
, я бы проверил привязку и вызвал метод.
binding = @bindings[key]
case binding
when :up
up
when :down
down
when .....
else
end
Есть ли лучшее решение?