Если вы хотите проверить, является ли строка целым числом, Integer () - это элегантный способ сделать это, потому что он гарантирует, что ваше определение целого числа соответствует ruby. если вы не хотите использовать это, потому что оно вызывает исключение, регулярные выражения работают хорошо - зачем их избегать? Также обратите внимание, что в целочисленном случае вы можете просто вставить y в свой стек, а не ch, и не вызывать вызовы to_i при извлечении. Что касается другого вопроса, рубин действительно имеет eval.
y = Integer(ch) rescue nil
if y
stack.push(y)
else
num2, num1 = stack.pop(2)
a = eval "#{num2} #{ch} #{num1}" # see mehrdad's comment for why not num1 ch num2
stack.push(a)
end