我试图设计一个简单的Ruby计算器,但我得到了一个错误

时间:2016-11-10 14:52:31

标签: ruby calculator

所以我在完成代码程序课程以及面向对象编程,第一部分和第三部分之后,第一次使用Ruby。我决定开始制作一个计算器。但出于某种原因,我收到了这个错误:

calc.rb:13:in `addition': undefined local variable or method `user_input' for main:Object (NameError)
  from calc.rb:21:in `<main>'

我很困惑为什么它没有看到我的&#34; user_input&#34;阵列。它超出了方法的范围吗?我把它初始化错了吗?

这里有代码,所以你可以自己看,它显然没什么复​​杂的,而且还没有完成。我现在正试图测试添加。

#!/usr/bin/env ruby

user_input = Array.new

puts "Would you like to [a]dd, [s]ubtract, [m]ultiply, or [d]ivide? "

type_of_math = gets.chomp

def addition
  operator = :+
  puts "Please enter the numbers you want to add (enter \"=\" to stop adding numbers): "
  until gets.chomp == "="
    user_input << gets.chomp.to_i
  end
  sum = user_input.inject(operator)
  return sum
end

case type_of_math
when "a"
  addition
when "s"
  puts "Test for subtraction"
when "m"
  puts "Test for multiplication"
when "d"
  puts "Test for division"
else
  puts "Wrong"
end

1 个答案:

答案 0 :(得分:0)

考虑代码中未经测试的这种变化。它更具惯用性:

def addition
  user_input = []
  puts 'Please enter the numbers you want to add (enter "=" to stop adding numbers): '
  loop do
    input = gets.chomp
    break if input == '='
    user_input << input
  end
  user_input.map(&:to_i).inject(:+)
end

请注意,它会将user_input放入方法中。它还使用正常[]空数组的直接赋值来初始化它。而不是chomp.to_i输入的每个值,它等待直到循环退出后才这样做。

而不是while循环,请考虑使用loop do。扫描代码时,它们往往更容易看到。

另请注意方法末尾没有return。 Ruby会自动返回最后看到的值。