我正在创建一个膳食计划程序,它一直给我这个错误:
main.rb:20:in `update': undefined method `[]=' for 1:Fixnum (NoMethodError)
这是代码:
print ("Welcome to the meal planner program")
def update(aMeal,aCal)
print"would u like to change drink or entree"
userWant = gets.chomp
if userWant =="entree"
print("Enter your new meal")
newMeal = gets.chomp
aMeal [0][0] = newMeal
print("Enter the cals")
newCal = gets.chomp
aCal[0][1] = newCal
end
if userWant == "drink"
print("enter your new drink")
newDrink = gets.chomp
aMeal[1][0] = newDrink
print("Enter the cals :")
newCal = gets.chomp
aCal[1][1] = newCal
end
end
def main
mondayMeal= [["Fettucine Alfredo",300],[" Drink of Choice!",150]]
cals = mondayMeal[0][1] + mondayMeal[1][1]
done = false
while done == false do
puts ("Do you want to 1.view your meals 2.modify your meals")
userChoice = gets.chomp
if userChoice == "1"
print "Your meal is" , mondayMeal[0][0] , "and" , mondayMeal[1][0]
print "your calories are" , mondayMeal[0][1] + mondayMeal[1][1]
end
if userChoice == "2"
print "what day?"
newDay = gets.chomp
if newDay == "monday"
update(mondayMeal,cals)
end
end
end
end
main
答案 0 :(得分:1)
在第20行,您尝试在整数上调用[]
方法。在ruby索引中,运算符只是普通的方法,因此在运行时得到NoMethodError
而不是其他语言中的语法错误。
您正在传递cals
,这是一个整数(ruby调用整数Fixnum
)作为update
方法的第二个参数。然后在第20行(我强烈建议使用包含行号的编辑器),您可以看到您正在执行此操作
aCal[1][1] = newCal
我很确定您打算使用aMeal
代替aCal
。
由于您显然刚刚开始学习Ruby,我会提出一些建议:使用数组作为数据结构是许多初学者在Ruby和Python等语言中所做的事情。但是,您应该使用类/对象来完成此操作,例如,您可能拥有Meal
个成员food
和calories
的课程。
答案 1 :(得分:0)
在第20行,aCal
应为aMeal
。