.split()方法不适用于ruby

时间:2016-02-12 01:13:45

标签: ruby

我试图在ruby上制作一个简单的代数计算器应用程序,但我在编码时遇到了问题。 .split方法,我用它将方程式划分为"部分" (用加号和减号分隔),确实将等式(eq)与+符号分开,但它没有 - 符号。

eq = gets.chomp
a = []
a = eq.split("+")

a.each do |n|
 case n
 when n.include?("-")
    a << n.split("-")
 end
end

print a[0], ";", a[1]

我使用的情况是因为如果我没有,它会返回NoMethod错误。我已经做了一个普通的计算器,所以我认为这将是一个很好的下一个项目。我也想知道你是否有任何想法让我的代码缩短;也许通过创建一个方法。下面是我的常规计算器代码,我也想知道如何缩短代码。

loop do
print
equation = gets.chomp

 if equation.include?"^"
    exponent_e = equation.split("^")
    result_e = exponent_e[0].to_f ** exponent_e[1].to_f
    print " = #{result_e} "
    puts
 elsif equation.include?"%"
    percent_e = equation.split("%")
    number = percent_e[0].to_f / 100
    result_p = number * percent_e[1].to_f
    print " = #{result_p} "
    puts
 elsif equation.include?"/"
    res_d = equation.split("/")
    result_d = res_d[0].to_f / res_d[1].to_f
    print " = #{result_d} "
    puts
 elsif equation.include?"*"
    res_m = equation.split("*")
    result_m = res_m[0].to_f * res_m[1].to_f
    print " = #{result_m} "
    puts
 elsif equation.include?"+"
    res_a = equation.split("+")
    result_a = res_a[0].to_f + res_a[1].to_f
    print " = #{result_a} "
    puts
 elsif equation.include?"-"
   res_s = equation.split("-")
   result_s = res_s[0].to_f - res_s[1].to_f
   print " = #{result_s} "
   puts
 else
    puts "Input valid equation"
 end
end

1 个答案:

答案 0 :(得分:2)

传递给split方法的参数将通过传递的参数拆分字符串,并返回一个数组,其他所有内容都将被拆分。

例如:

"a+b".split("+")
#=> ["a", "b"]

"c-d".split("+")
#=> ["c-d"]

"c-d".split("-")
#=> ["c", "d"]

我可能会通过使用OOP创建class Calculator然后为每个功能创建方法(即加号,减号,除法等等)来重构代码。这将使代码更易读,更易于维护。

另一个值得考虑的好处是使用元编程。

def calculate(fxn, arr_numbers)
  if arr_numbers.size == 2
    arr_numbers.send(:reduce, fxn)
  end
end

其中fxn是一个字符串(即“+”,“ - ”等等),而arr_numbers是一个包含2个数字的数组,而不是字符串(即[2,5])

你可以扩展它以获取多个数字或添加其他功能..