Ruby sınıfı Foo::Bar
'u düşünün.Ruby sınıf veya modül ile ad-isim mi yapıyorsunuz?
kongre bir modül olarak 'Foo' ad alanı için, ama aynı kolaylıkla bir sınıf olabilir:
module Foo; class Bar; end; end
Karşı: İkinci durumda
class Foo; class Bar; end; end
, Bar
Foo
iç sınıfı değil, sadece Foo
tekilinde tanımlanan başka bir sabit. Üst sınıf, her iki durumda da Nesne'dir ve yalnızca Çekirdek modülünü içerirler. Atalarının zincirleri aynıdır.
Yani, operasyonların yanı sıra onun sınıfına bağlı Foo
ile yapabiliriz (Bir sınıf,/uzatmak eğer örneğini eklerseniz bir modülü), ad niteliği Bar
üzerinde herhangi bir etkisi var? Bir isimde bir çok isim aralığını seçmek için zorlayıcı nedenler var mı?
Gördüğüm tek tuhaf şeyler, sırasıyla Foo::Bar.new.extend Foo
ve Foo.new.class::Bar
.
class Foo
Bar = Struct.new(:something) do
def digest
puts "eating #{something}"
end
end
def eat(something)
Bar.new(something).digest
end
end
en yakın ben bu tartışmaya bulundu:
sınıf içerisinde tanımlanan bir sınıfın Kendi en-yaygın kullanımı sadece sınıfı tarafından dahili olarak kullanılması amaçlanan bir yardımcı yapı/sınıf olurdu "Using Class vs Module for packaging code in Ruby" içinde.
İlginçtir, ben ilgili bir başka konu Rails olduğunu görmeme const_missing kullanarak http://bugs.ruby-lang.org/issues/2740 – BF4