I need a method that through an input string to do a calculation, like this
function = "(a/b)*100"
a = 25
b = 50
function.something
>> 50
have some method for it?
You can use instance_eval:
function = "(a/b)*100"
a = 25.0
b = 50
instance_eval function
# => 50.0
Be aware though that using eval is inherently insecure, especially if you use external input, as it may contain injected malicious code.
Also note that a is set to 25.0 instead of 25, since if it is an integer a/b would result in 0 (integer).
You can take a look at the gem dentaku, which is math and logic formula parser and evaluator.
require 'dentaku'
a = 25.0
b = 50
function = "(#{a}/#{b})*100"
calculator = Dentaku::Calculator.new
calculator.evaluate(function) # => 50.0
Don't use any eval.
eval. eval is fine when you know what's being eval'd. If the string is created by the script, and is based on sanitized data then it's safe. It's unsafe when the data is unknown/not-sanitized.eval, and I will look for a math parser, like the one I have shown here. I don't support,eval using, where there is a way. #instance_eval or #instance_exec has other purposes, but not they are for mathematical calculations.. Any way it is matter of taste, about avoiding risk."(a/b)*100" and then add the variables {a: 25.0, b: 50} to the evaluate
Kernel#eval... Likeeval(function).#eval. Think it some other way. No point to use any eval family in doing such math.