【问题标题】:Ruby - Undefined Local Variable or MethodRuby - 未定义的局部变量或方法
【发布时间】:2012-11-01 23:15:26
【问题描述】:

我正在尝试运行这样的代码:

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

但是if语句中的方法generator_story一直抛出这个错误:

main:Object (NameError) 的未定义局部变量或方法“generate_story”

我的印象是我已经在我的代码中定义了该方法。谁能告诉我哪里出错了?

【问题讨论】:

    标签: ruby function variables


    【解决方案1】:

    generate_storyRun_Fiction_Generator 的一个方法,应该这样调用:

    generator.generate_story
    

    【讨论】:

    • 您好,失谐,我尝试了您的建议,但仍然无效。现在错误已被抛出到 generator_story 方法“generator_story: undefined local variable or method 'generator' for #Run_Fiction_Generator。很抱歉打扰,但我是一个菜鸟,我现在承受着很大的压力。这花了我几个星期才走到这一步,现在我很沮丧
    • @muyiwamat,您不应该在Run_Fiction_Generator 方法中使用generator.generator 是在类外部定义的局部变量。看来您不确定自己在做什么。请先阅读一本关于 Ruby 的书,并掌握基本知识。
    • 我遇到了同样的问题,我做了同样的事情我实例化了类并使用对象调用了方法..它起作用了...我是来自 Java 的 Ruby 新手...调用本地像这样的方法有点冗长......我认为..
    【解决方案2】:

    您的另一个问题是如何在 generate story 方法中访问变量和方法。试试这个:

    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
    

    【讨论】:

    • 您好,感谢您的回复。 title 和 random_date 实际上是从另一个类继承的函数。所以它们并不完全是我在这个特定代码中创建的变量。
    • 好的,相应地进行了编辑。如果 title 和 random_date 是实例方法并且对于名为 @story 的实例变量,则该代码有效。
    • 所以你是说我可以制作继承函数的实例变量?我会试一试。我只是不确定它会以这种方式工作,因为我必须创建继承类的对象来调用它的函数谢谢
    • 不...但是如果 title 和 random_date 是继承的方法,那将起作用。
    • 还是不行。我放弃。我的计划是用尽可能少的代码行来做到这一点。我想我只需要复制和粘贴 puts "Title: \"#{generator.title} #{generator.random_date}\"" puts "--------" puts generator.story 我到处都是需要它。感谢您的宝贵时间
    【解决方案3】:

    顺便说一句:类名是“错误的”

    使用 CamelCase 作为类名,而不是 '_ 来分隔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      相关资源
      最近更新 更多