2009-05-16 32 views
6

Tôi có một mô-đun Shish (hoạt động như một lớp trừu tượng) và lớp khách truy cập Only_Onions.Hằng số Uninitialized MyClass (NameError) trong Ruby

Tôi muốn khởi tạo Only_Onions trong mô-đun Shish để tất cả các lớp mở rộng Shish có thể sử dụng đối tượng để xác định nếu chúng chỉ có__dions.

module Shish 
    only_onions_class = Only_Onions.new 
end 

class Only_Onions 
    def for_skewer 
     return true 
    end 
end 


class Skewer 
    include Shish 

    def only_onions 
     return only_onions_class.for_skewer 
    end 

    def veg? 
     return true 
    end 
end 

Nhưng tôi nhận được một lỗi "chưa được khởi tạo liên tục Shish :: Only_Onions (NameError). Điều đó có nghĩa là gì?

Trả lời

6

Trình tự kê khai có hiệu lực thi hành. Doesn Shish Không biết về Only_Onions trong mã của bạn. Nếu bạn thay đổi thành chỉ số này, thì Only_Onions đã được khai báo khi bạn xác định mô-đun Shish:

class Only_Onions 
    def for_skewer 
     return true 
    end 
end 

module Shish 
    only_onions_class = Only_Onions.new 
end 

class Skewer 
    include Shish 

    def only_onions 
     return only_onions_class.for_skewer 
    end 

    def veg? 
     return true 
    end 
end 
+0

Điều này giải quyết được vấn đề ban đầu. Nhưng tôi nghĩ rằng only_onions_class cần phải là một biến lớp. Tôi có đúng không? Tôi vẫn có thể làm cho mã trên hoạt động chính xác không? – unj2

1

thử

::Only_Onions 
+1

Tôi nghĩ rằng :: là chỉ khi bạn có một tên mô-đun trước khi nó và một tên lớp sau khi nó để chỉ định một không gian tên? Nó làm gì khi bạn sử dụng nó mà không có một mô-đun ở phía trước của nó? Tôi không quen với điều này. –

+1

Một vùng tên trống cho biết không gian tên chung. Vì vậy, Object là cả hai "Object" và ":: Object". – Chuck

Các vấn đề liên quan