我有一个名为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>
我相信 return self
这是最简单的方法
如果您不能链接方法并且不能在调用之间调用接收器,您可以尝试使用以下内容包装您的对象:
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