所以我在完成代码程序课程以及面向对象编程,第一部分和第三部分之后,第一次使用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
答案 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会自动返回最后看到的值。