每次引用对象时调用方法

时间:2014-02-23 17:45:07

标签: ruby

假设我有一个课程如下

class MyClass < Array
  def clean_up
    #clean up array
  end
end

以下是一些使用示例:

obj = MyClass.new

#I call some methods on obj

a = obj           #1
obj               #2
obj.some_method   #3
f = obj[0]        #4

有没有办法让我强制调用clean_up,只有当对象本身被返回时(即没有方法调用它)。

更具体地说,我想在案例1&amp;中调用clean_up。 2,但不是在案例3&amp; 4。

我该怎么做呢?是否有一些我可以覆盖的隐式方法,或者我可以利用ObjectBasicObject类中的某些功能?

注意:在情况1和2中,返回实际对象,但在情况3和2中。 4,对象不返回。有关我的具体信息,请参阅评论。

2 个答案:

答案 0 :(得分:0)

您可以定义一个访问该对象的方法:

class MyClass < Array
  def clean_up
    puts 'cleaning up the array now'
  end

  def get
    clean_up
    self
  end
end

m = MyClass.new
m.get.class
# cleaning up the array now
# => MyClass

答案 1 :(得分:0)

我认为你无法做到这一点,因为调用obja = obj并不会实际调用obj (MyClass)对象。同样,您将能够更改控制台中打印的内容(如果您正在使用它),但我想这不是您想要的。

以下是一些有关类似问题的有趣线索: Modifying the default return value of an object belonging to an extended class Ruby Class Return Value