2009-05-16 25 views
6

Bir modül Shish (bir soyut sınıf gibi davranan) ve bir ziyaretçi sınıfı Only_Onions var.Ruby'de sıfırlanmamış sabit MyClass (NameError)

Yalnızca Shish'i genişleten tüm sınıfların nesneyi yalnızca birer parçası olup olmadığını belirlemek için nesneyi kullanabilmesi için Shish modülündeki Only_Onions öğesini örneklendirmek istiyorum.

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 

Ama ne anlama geliyor. "Başlatılmamış sabit Şiş :: Only_Onions (NameError) bir hata alıyorum?

cevap

6
bildirisinin sırası bir etkiye sahiptir

deneyin. Şiş doesn Kodunuzdaki Only_Onions hakkında birşeyler bilmiyorsanız, bunu değiştirdiğinizde, modülü tanımladığınızda, Only_Onions zaten bildirilmiştir: Shift:

+0

Bu, orijinal sorunu çözdü. Ama sanırım only_onions_class'ın bir sınıf değişkeni olması gerekiyor. Doğrumuyum? Yukarıdaki kod çalışmasını hala doğru yapabilir miyim? – unj2

1

::Only_Onions 
+1

Ben sadece önce bir modül isminiz olduğunda ve bir ad alanı tanımlamak için bir sınıf adı olduğunda olduğunu düşündüm? Önünde bir modül olmadan bunu kullanırken ne yapar? Buna aşina değilim. –

+1

Boş bir ad alanı, genel ad alanını gösterir. Yani Nesne hem "Nesne" hem de ":: Nesne" dir. – Chuck

İlgili konular