2012-11-01 46 views
0

我试图运行这样的代码:在if声明红宝石 - 未定义的局部变量或方法

class Run_Fiction_Generator < Fiction_Generator 
    def generate_story 
    puts "Title: \"#{generator.title} #{generator.random_date}\"" 
    puts "---------" 
    puts generator.story 
    end 
end 

prompt = '>' 

puts "Hello Welcome to Fiction Generator" 
puts "First a little about me: " 
puts "" 

generator = Run_Fiction_Generator.new 

puts "This amazing Fiction Generator was created by: #{generator.created_by}" 
puts "He's a student with ID number: #{generator.student_id} " 
puts "" 
puts "Okay now your story! Enter '1' if you want to generate a story now, or '2' if you don't want to" 
print prompt 
answer = gets.chomp 

if answer == "1" 
    generate_story 
else 
    puts "It was nice meeting you, catch ya later!" 
end 

但该方法generator_story不断抛出此错误:

undefined local variable or method 'generate_story' for main:Object (NameError)

我m的印象是我已经在我的代码中定义了方法。任何人都可以告诉我哪里出了问题?

回答

6

generate_storyRun_Fiction_Generator的方法和它应该被称为是这样的:

generator.generate_story 
+0

嗨detunized,我试过你的建议,但它仍然没有奏效。现在错误已经被引发到了generator_story方法“generator_story:undefined local variable或method'generator'for #Run_Fiction_Generator。 所以很抱歉成为一个麻烦,但我是一个noob,现在我承受着严重的压力。花了我几周的时间才得到这个,现在我只是沮丧 – muyiwamat

+1

@muyiwamat,你不应该在'Run_Fiction_Generator'方法里面使用'generator.' generator'是在类之外定义的局部变量。确定你在做什么,请先阅读一本关于Ruby的书,并获得基础知识 – detunized

+0

我有同样的问题,我做了同样的我实例化类,并调用方法使用对象..它的工作...我是Ruby的新来自Java ...调用一个像这样的本地方法有点冗长......我想.. – sarmahdi

1

你的另一个问题是,你是如何访问产生的故事方法内部的变量和方法。 BTW

class Run_Fiction_Generator < Fiction_Generator 
    def random_date 
    "10/20/2012" 
    end 

    def title 
    "Spooky, Late Halloween Story" 
    end 

    def generate_story 
    puts "Title: \"#{title} #{random_date}\"" 
    puts "---------" 
    puts @story 
    end 
end 
+0

嗨,感谢您的回复。title和random_date实际上是从anot继承的函数她的班级。所以他们不是我在这个特定代码中创建的完全变量。 – muyiwamat

+0

Ok编辑相应。如果title和random_date是实例方法并且名为@story的实例变量,那么该代码将起作用。 –

+0

所以你说我可以创建继承函数的实例变量?我会试一试。我只是不确定它会这样工作,因为我将不得不创建继承类的对象并将其称为它的函数谢谢 – muyiwamat

0

:试试这个类名是类名 “错误”

使用首字母大写,而不是“_分离。

相关问题