我有一个名为Some
的班级。 Some
的每种方法都返回一个字符串
但我希望所有方法都return self
。这只是最后添加return self
的问题,但有更简单,更智能的方法吗?
我不能篡改原来的课程,所以请回答这个问题。
我不知道该尝试什么。请帮忙。
答案 0 :(得分: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>
答案 1 :(得分:0)
我相信return self
是最简单的方法
答案 2 :(得分: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