【问题标题】:How to add specific piece of code in each method of class如何在类的每个方法中添加特定的代码
【发布时间】:2013-08-21 05:28:36
【问题描述】:

我有一个名为Some 的类。 Some 的每个方法都返回一个字符串。
但我想要所有方法return self。只需要在最后加上return self就可以了,但是有没有更简单更聪明的方法呢?
我不能篡改原来的类,所以请考虑一下。

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

【问题讨论】:

  • 我对引发这个问题的环境非常好奇......

标签: ruby class oop object


【解决方案1】:

我认为您只能将self 添加为每个方法的最后一条语句。不用写return self,只写self就够了。

更新

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

class Demo
  def foo
    # code
  end
end

bar = Demo.new # => #<Demo:0x115c7d0>
bar.method(:foo).receiver # => #<Demo:0x115c7d0>

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果你不想能够链接方法而不是在调用之间调用接收器你可以尝试用这样的东西包装你的对象:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        相关资源
        最近更新 更多