如何在ruby中乘以“5×3”字符串?

我怎样才能将这个字符串乘以:“5×3”并将总数作为整数?

我的理念倾向于“将其纳入数据结构,使用我们用于处理数据结构的优秀工具,然后在必要时转换回来”。

"5x3".split('x').map(&:to_i).reduce(&:*) 

有两种安全的方法:使用$SAFE设置为1或更高的eval(多高取决于您的应用程序),或使用专用的数学解析器。 我推荐第二种方法(更难以解决这个问题),如果你需要的不仅仅是基本的算术评估,那么只使用eval方法。

为此,请使用gem install expression_parser安装expression_parser gem。 然后,您可以使用以下代码来评估数学表达式:

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

这将打印出15.0

在尝试消毒你的输入(至少一点点)的过程中,我的建议如下:

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

还是,有点荒谬。

试试这个:

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

或者如果你是一个正常的偏执狂:

 eval(str.gsub('x','*').gsub(/[^\d+*-\/]/,''))