2012-05-25 10 views

cevap

7

Sen sınıf bir OpenStruct için işlemez tüm yöntemleri için yetki verebilirsiniz:

require 'ostruct' 

class Test_OS 

    def initialize 
    @source = OpenStruct.new 
    end 

    def method_missing(method, *args, &block) 
    @source.send(method, *args, &block) 
    end 

    def own_method 
    puts "Hi." 
    end 

end 

t = Test_OS.new 
t.foo = 1 
p t.foo #=> 1 
t.own_method #=> Hi. 
+1

kullanmak istiyorum Bunu yaparsanız, standart kitaplıktan kendi başına yuvarlanmak yerine delegate sınıfına bakmak isteyebilirsiniz: http://www.ruby-doc.org/stdlib-1.9.3/libdoc /delegate/rdoc/index.html –

1

ait

class Book 
    include MyModule 
end 

module MyModule 
    def self.included(klass) 
    # Make including class behave like OpenStruct 
    end 
end 

bir modül değildir ve modüller sınıflardan miras neden olmaz, sen OpenStruct yeteneklerini uygulamak için method_missing kullanan kendi modülü yazmak gerekir. Neyse ki, bu çok az iş. Tüm OpenStruct sınıfı sadece yaklaşık 80 satır koddur ve çoğunun tam olarak ihtiyaç duyma olasılığı yoktur.

Eğer OpenStruct kendisi güvenmek istedik güçlü bir nedeni var mı?

İlgili konular