如何在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+*-\/]/,''))