如何在每个类的方法中添加特定的代码片段

时间:2013-08-19 12:07:33

标签: ruby class oop object

我有一个名为Some的班级。 Some的每种方法都返回一个字符串 但我希望所有方法都return self。这只是最后添加return self的问题,但有更简单,更智能的方法吗? 我不能篡改原来的课程,所以请回答这个问题。

我不知道该尝试什么。请帮忙。

3 个答案:

答案 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