2009-06-26 25 views
32

Bir süreliğine bir Ruby modülünün içine bir sınıf ekledim. Anlaşılan bu benim yapmam gereken şey değil. Bir modülün noktasının, daha sonra yeni bir sınıfta yöntem olarak dahil edilebilecek fonksiyonları saklamak olduğu anlaşılmaktadır.Ayrı bir dosyadan bir Ruby sınıfı dahil

Bunu istemiyorum. Başka dosyalardan erişebileceğim ayrı bir dosyada tutmak istediğim bir dersim var. Bunu nasıl yapabilirim?

Teşekkürler.

+0

Bu ileti, Ruby> = 1.9.2 [Ruby require_relative example] (http://stackoverflow.com/questions/3672586/what-is) adresinde, yukarıdaki örnekte sorun yaşamanız durumunda require_relative ifadesini açıklar. -require-nispeten-yakut) – Dirk

cevap

55

Modüller, işlevler ve ad alanı için bir tutucu olarak ikili bir amaca hizmet eder. Sınıfları modüllerde tutmak tamamen kabul edilebilir. Sınıfı ayrı bir dosyaya koymak için, sınıfı her zamanki gibi tanımlayın ve sonra sınıfı kullanmak istediğiniz dosyada, en üstüne require 'name_of_file_with_class' yazın. Örneğin, Foo sınıfını foo.rb numaralı sınıfta tanımladıysam bar.rb numaralı telefon hattında require 'foo' satırına sahip olurdum. Rails iseniz dosya düzeni açıklama

#file: foo.rb 
class Foo 
    def initialize 
    puts "foo" 
    end 
end 

...

#file: bar.rb 
require 'foo' 

Foo.new 

, koyun bunlar: Eğer Rails kullanıyorsanız

, bu genellikle automagicallylar

Düzenleme olur içerir lib/'daki sınıfları ve sınıf adının küçük harfle işaretlenmiş sürümü için adlandırma kuralını kullanın. >foo.rb, FooBar - - Foo>foo_bar.rb vb

yakut 1.9 sürümü itibariyle nispeten düzenlediğiniz dosyanın dosya gerektirecek şekilde, require_relative kullanabilirsiniz

.

+0

teşekkürler, çok yararlı. Son cümleyi netleştirebilir misin? bir yazım hatası yaşayabilirsiniz (?). Eğer sınıf foo, bar.rb dosyasında saklanıyorsa, bazcontroller.rb dosyasında 'foo' gerekir mi? Sonra foo.new bazcontroller.rb kullanılabilir? – user94154

+9

Belki de bu sürüm için kod çalışmadığından Ruby 1.9 için 'require_relative' hakkında bilgi eklemek güzel olurdu. – boutta

+2

@boutta 1.9 açıklama için teşekkürler, bu sorunu giderdim. – DorkRawk