0

我有一个名为Some. 每个方法都Some返回一个字符串。
但我想要所有的方法return self。只是return self最后添加的问题,但是有没有更简单更聪明的方法呢?
我不能篡改原来的类,所以请考虑到这一点来回答。

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

4

3 回答 3

2

我认为您只能将self最后一条语句添加到每种方法中。不用写return selfself就够了。

更新

根据您上次的编辑,Method#receiver如果您不想再次打开课程,我认为您可以使用。

class Demo
  def foo
    # code
  end
end

bar = Demo.new # => #<Demo:0x115c7d0>
bar.method(:foo).receiver # => #<Demo:0x115c7d0>
于 2013-08-19T12:11:26.820 回答
0

我相信 return self这是最简单的方法

于 2013-08-19T12:12:15.620 回答
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
于 2013-08-19T13:59:49.520 回答