2013-08-19 29 views
0

我有一個名爲Some的類。 Some的每種方法都返回一個字符串。
但我想所有的方法return self。這只是最後添加return self的問題,但有沒有更簡單更智能的方法?
我不能篡改原來的課程,所以請回答這個問題。如何在每個類的方法中添加特定的代碼段

我不知道該怎麼嘗試。請幫忙。

+0

我非常好奇這個問題的動機...... – Max

回答

2

我想你可以只添加self作爲最後一個語句給每個方法。沒有必要寫return self,只有self就足夠了。

更新

按你最後的編輯,我認爲你可以使用Method#receiver,如果你不想再次打開你的類。

class Demo 
    def foo 
    # code 
    end 
end 

bar = Demo.new # => #<Demo:0x115c7d0> 
bar.method(:foo).receiver # => #<Demo:0x115c7d0> 
+0

我知道這一點。請參閱編輯的問題。 – svineet

0

我相信return self是,如果你wan't要能夠鏈的方法和不叫呼叫您可以嘗試包裝你的對象像這樣的東西之間的接收器做

+0

請參閱已編輯的問題。 – svineet

0

最簡單的方法:

class Foo 

    def foo1_method 
    puts 'foo1_method' 
    end 

    def foo2_method 
    puts 'foo2_method' 
    end 

end 

class Chainable 
    attr_reader :receiver 

    def initialize(obj) 
    @receiver = obj 
    end 

    def method_missing(method, *args, &blk) 
    if @receiver.respond_to?(method) 
     @receiver.send(method, *args, &blk) 
     self 
    else 
     super 
    end 
    end 

    def respond_to?(method) 
    if @receiver.respond_to? method 
     true 
    else 
     super 
    end 
    end 

end 

obj = Foo.new 
chainable = Chainable.new obj 
chainable.foo1_method.foo2_method 

如果你想找回原來的對象,你可以把它像這樣

chainable.receiver 
相關問題