Ruby未定义方法`[] ='为1:Fixnum

时间:2015-01-16 16:56:43

标签: ruby methods

我正在创建一个膳食计划程序,它一直给我这个错误:

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

2 个答案:

答案 0 :(得分:1)

在第20行,您尝试在整数上调用[]方法。在ruby索引中,运算符只是普通的方法,因此在运行时得到NoMethodError而不是其他语言中的语法错误。

您正在传递cals,这是一个整数(ruby调用整数Fixnum)作为update方法的第二个参数。然后在第20行(我强烈建议使用包含行号的编辑器),您可以看到您正在执行此操作

aCal[1][1] = newCal

我很确定您打算使用aMeal代替aCal

由于您显然刚刚开始学习Ruby,我会提出一些建议:使用数组作为数据结构是许多初学者在Ruby和Python等语言中所做的事情。但是,您应该使用类/对象来完成此操作,例如,您可能拥有Meal个成员foodcalories的课程。

答案 1 :(得分:0)

在第20行,aCal应为aMeal