2014-12-13 23 views
0

閱讀之前。我是Ruby新手,我嘗試通過例子和練習來學習。 我發現了一些鍛鍊,我被卡住了。新手問題。通過示例實現的Ruby類

編寫一個模擬酒店房間的Ruby程序。用戶將進入,發出一張票,退出並當然支付。

基本必需的場景:

用戶可以進入酒店,如果有足夠的房間。 用戶可以退出,如果支付 已經在酒店中的用戶在退出之前不能再次進入。 這是我做的:

class Hotel < User 
     attr_accessor :room 
     def initialize(room) 
      @room = [] 
      super(name) 
     end 

     def on_entry 
      if room.count < 20 
      new_array = [] 
      rooms.each do |space| 
       new_array << space 
       print("You just rent a room!") 
       end 
      else 
       print("Thank you for coming!") 
      end 
     end 

     def on_exit 
      if name.exist 
       user.time_dindong 
      else 
       puts "Please, pay for room first" 
      end 
     end 
    end 

    class User 
     attr_accessor :name, :id 
     def initialize(name, id) 
      @name = name 
      @id = id 
     end 
    end 

我得到錯誤:Hotel.rb:1:'':未初始化的常數用戶(NameError) 誰能請告訴我什麼,我做錯了。如果它有另一種方式來做到這一點?

謝謝你的時間。

+0

無關,但考慮命名:房間的集合大概應該是什麼複數,如「房間」,而不是「房間」。什麼是'new_array'和'new_parking'? – 2014-12-13 18:40:16

+0

戴夫牛頓感謝男人,這是我的錯誤! – muzaparofff 2014-12-14 06:45:35

回答

1

您需要酒店類

class User 
    attr_accessor :name, :id 
    def initialize(name, id) 
     @name = name 
     @id = id 
    end 
end 

class Hotel < User 
    # ... 

之前聲明用戶類,並且我不認爲你需要從用戶擴展酒店。它必須是:

class Hotel 
    # .. 
+0

德馬斯感謝人,所以如果我不能擴展它,我怎麼能使用像on_entry這樣的酒店方法? – muzaparofff 2014-12-14 06:48:57

+0

我認爲你需要將用戶作爲參數傳遞給on_entry方法和on_exit – demas 2014-12-14 06:52:40

+0

我試過並得到像你說的,但我得到錯誤:「未定義的方法'on_exit或on_entry'」。我真的不明白如何做到這一點... – muzaparofff 2014-12-14 09:06:38

0

問題在於您將酒店定義爲擴展用戶,但後來在酒店後定義了用戶。用戶應該在酒店之前定義。

(這也是一個有點匪夷所思看到酒店從用戶繼承,但我沒有檢查你的代碼的其餘部分的理智。)

+0

丹尼斯謝謝你。要了解你可以看到我描述的場景。 – muzaparofff 2014-12-14 06:46:35