ruby - 学习 Ruby the Hardway ex。 42. 2 个文件中的 2 个类

标签 ruby class learn-ruby-the-hard-way

我了解类的工作原理以及如何制作它们,但是练习的第二个额外学分要求在 2 个不同的文件中创建一个两类版本。

我尝试了不同的方法,但我不知道如何让它发挥作用......

我不知道我是否没有在正确的地方搜索,但我找不到任何帮助,也找不到任何解决方案......

如果有人能帮助我,我将不胜感激:)

这是练习:http://ruby.learncodethehardway.org/book/ex42.html

到目前为止我已经尝试过:

map.rb
class Map

with all the methods in here (death(), central_corridor(), etc.)

然后

engine.rb
class Engine
require './map.rb'

  def initialize(start)
    @quips = [
      "You died. You kinda suck at this.",
      "Nice job, you died... jackass.",
      "Suck a luser."
    ]

    @start = start
    puts "in init @start = " + @start.inspect
  end

  def prompt()
    print "> "
  end

  def play()
    puts "@start => " + @start.inspect
    @next_room = @start

    while true
      puts "\n--------"
      room = method(@next_room)
      @next_room = room.call()
    end
  end

end

a_game = Engine.new(:central_corridor)
a_game.play()

所以基本上我所做的就是获取游戏中用于“ Action ”的方法(房间、死亡等......并将它们放入map.rb中的类Map中,然后在engine.rb中调用,其中我让我的类 Engine 具有“通用”方法/变量,例如提示、播放、启动。

我得到的错误是

engine.rb:24:in `method': undefined method `central_corridor' for class `Engine'

我理解这意味着 ruby​​ 试图在类引擎中找到一个方法“central_corridor”,但它在 map.rb 的类映射中,我不知道该怎么做,要么是一些变量修改,要么只是一些要添加的东西...:(

最佳答案

问题是您没有类 Map 的实例,这就是您需要能够调用的 central_corridor 。将其添加到 initialize :

@map=Map.new

并更改room = method(@next_room)<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e79588888adaa78a8697c98a82938f8883" rel="noreferrer noopener nofollow">[email protected]</a>(@next_room) .


虽然这不是你的问题,但我有一种感觉,如果Map永远不会改变(您对 map 中的所有内容都有方法),您将所有方法都创建为类方法,并且只使用类 Map为你的 map 。但根据良好的设计原则,您应该使 map 具有 Hash代表区域的 lambda。这样,您就可以拥有多个 map

关于ruby - 学习 Ruby the Hardway ex。 42. 2 个文件中的 2 个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147296/

相关文章:

Ruby gets.chomp 和 $stdin.gets.chomp 区别

ruby-on-rails - 我是否正确地重新索引了这个 Sphinx 索引?

ruby-on-rails - ElasticSearch Rails - 设置自定义分析器

ruby-on-rails - not_nil 有 Ruby 或 Ruby 主义吗?与零相反?方法?

ruby - 使用 Ruby 和 Nokogiri 迭代访问子 XML 元素

php - Wordpress:使用数组手动将类添加到 post_class?

c++ - 将基类转换为其派生类之一?

Ruby Exercise 18 undefined method 虽然我定义了方法

c++ - 将两个不同的类(具有相同的继承基类)存储在同一个 vector 中? (无提升)