Перевод буквенного вашего Java-кода будет выглядеть примерно так:
klass = ...
if klass == String
...
elsif klass == Integer
...
end
Или, более идиоматически
klass = ...
case
when klass == String
...
when klass == Integer
...
end
Или, может быть
klass = ...
DISPATCH_TABLE = {
String => -> { ... },
Integer => -> { ... }
}
DISPATCH_TABLE[klass].()
Однако Ruby является объектно-ориентированным языком, и в объектно-ориентированном языке это просто не имеет смысла. Вместо этого вы просто напишите
class String
def do_something
...
end
end
class Integer
def do_something
...
end
end
и язык выполнит диспетчеризацию для вас. Это называется полиморфизм и поддерживается практически всеми объектно-ориентированными языками, а также многими не объектно-ориентированными.
Это конкретное преобразование является одним из фундаментальных рефакторингов, описанных в книге Мартина Фаулера (стр. 255), оно называется Заменить условным полиморфизмом Рефакторинг .
Самая большая проблема с разумным решением вашей проблемы заключается в том, что вы не говорите нам, в чем проблема . Вы только скажете нам, что такое решение . Или, точнее, вы говорите нам, что вы думаете решение в Java , и вы как-то ожидаете, что решение в Ruby будет точно 100% идентичным хотя языки не могут быть более разными.
Чтобы найти хорошее решение, нам нужно сначала узнать проблему. Другими словами: наиболее важными частями вашего вопроса являются …
s