Как умножить строку "5x3" в рубине? - PullRequest
0 голосов
/ 07 апреля 2011

Как мне умножить эту строку: "5x3" и получить сумму как целое число?

Ответы [ 4 ]

5 голосов
/ 07 апреля 2011

Моя философия, как правило, заключается в том, чтобы «включить ее в структуру данных, использовать замечательные инструменты, которые у нас есть, для работы со структурами данных, а затем преобразовать обратно при необходимости».

"5x3".split('x').map(&:to_i).reduce(&:*)
3 голосов
/ 07 апреля 2011

Есть два безопасных способа сделать это: использовать eval с $SAFE, установленным в 1 или выше (насколько высоко зависит от вашего приложения), или использовать специальный математический парсер. Я рекомендую второй метод (намного сложнее ошибиться), используйте метод eval, только если вам нужно больше, чем просто арифметическая оценка.

Для этого установите камень expression_parser с gem install expression_parser. Затем вы можете использовать следующий код для вычисления математического выражения:

require 'expression_parser'
parser = ExpressionParser::Parser.new
p p.parse("5 * 3") 

Это распечатает 15.0.

1 голос
/ 07 апреля 2011

В дополнение к попыткам дезинфицировать ваш вклад (хотя бы немного), вот мое предложение:

def multiply_from_string(string)
  string.split('x').map { |number| number.to_i }.inject(&:*)
end

Тем не менее, довольно смешно.

1 голос
/ 07 апреля 2011

Попробуйте это:

eval("5x3".gsub("x","*"))

или если вы обычный параноик:

eval(str.gsub('x','*').gsub(/[^\d+*-\/]/,''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...