我有一個名爲Some
的類。 Some
的每種方法都返回一個字符串。
但我想所有的方法return self
。這只是最後添加return self
的問題,但有沒有更簡單更智能的方法?
我不能篡改原來的課程,所以請回答這個問題。如何在每個類的方法中添加特定的代碼段
我不知道該怎麼嘗試。請幫忙。
我有一個名爲Some
的類。 Some
的每種方法都返回一個字符串。
但我想所有的方法return self
。這只是最後添加return self
的問題,但有沒有更簡單更智能的方法?
我不能篡改原來的課程,所以請回答這個問題。如何在每個類的方法中添加特定的代碼段
我不知道該怎麼嘗試。請幫忙。
我想你可以只添加self
作爲最後一個語句給每個方法。沒有必要寫return self
,只有self
就足夠了。
更新
按你最後的編輯,我認爲你可以使用Method#receiver
,如果你不想再次打開你的類。
class Demo
def foo
# code
end
end
bar = Demo.new # => #<Demo:0x115c7d0>
bar.method(:foo).receiver # => #<Demo:0x115c7d0>
我知道這一點。請參閱編輯的問題。 – svineet
最簡單的方法:
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
我非常好奇這個問題的動機...... – Max